asp.net mvc 4 - tutorial - ¿Cómo crear métodos personalizados WebSecurity.Login y WebSecurity.CreateUserAndAccount en MVC 4?
membership asp net visual studio 2015 (2)
Tendrá que implementar sus propios proveedores de Membresía y Función.
Proveedor personalizado:
namespace MyApp.Helpers
{
public class CustomProviderProvider : SimpleMembershipProvider
{
public override MembershipUser GetUser(string username, bool userIsOnline)
{
return base.GetUser(username, userIsOnline);
}
public override bool ValidateUser(string username, string password)
{
return true; // base.ValidateUser(username, password);
}
}
}
Simplemente deberá anular los métodos que desea "interceptar" (es decir, ValidateUser). También necesitará registrar el proveedor en el archivo web.config:
<system.web>
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
<add name="CustomMembershipProvider" type="MyApp.Helpers.CustomMembershipProvider, MyApp" />
</providers>
</membership>
</system.web>
También debería tener un filtro llamado "InitializeSimpleMembershipAttribute"
namespace CustomPortal.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<CustomPortalContext>(null);
try
{
using (var context = new CustomPortalContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
//Here is where you give it your connection string name
WebSecurity.InitializeDatabaseConnection("CustomPortal", "UserProfile", "UserId", "EmailAddress", autoCreateTables: true);
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
}
}
}
}
}
Espero que esto ayude...
Cuando elijamos New Project --> MVC 4 --> Internet Application
, automáticamente generará AccountController para nosotros. En este controlador, solo me preocupan 2 acciones, Login
y Register
.
En MVC 3, utiliza los métodos estáticos de la membresía, ValidateUser
en la acción de Login
de Login
y CreateUser
en Register
. Entonces, si quiero integrarlo con mi propia base de datos, solo necesito crear CustomMembershipProvider
extendiendo MembershipProvider
y anulando esos dos métodos.
Pero en MVC 4, usa WebSecurity.Login
y WebSecurity.CreateUserAndAccount
. Mis preguntas son:
- ¿Cómo puedo hacer que use mi propia base de datos como lo hice en MVC 3?
- ¿Qué es diferente? ¿Por qué no sigue usando métodos estáticos de Membresía? ¿Por qué tiene que cambiar a
WebSecurity
?
Muchas gracias por su ayuda.
ASP.NET MVC 4 usa un nuevo proveedor de membresía llamado SimpleMembershipProvider. WebMatrix es una fachada sobre SimpleMembershipProvider. Ya no es necesario modificar el archivo de configuración con ASP.NET MVC 4. Obtenga más información aquí: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords. html
1. ¿Cómo puedo usar mi propia base de datos como lo hice en MVC 3?
R: No es necesario anular SimpleMembershipProvider si desea lanzar el suyo. Elimine la referencia al InitializeSimpleMembershipAttribute
en la clase AccountController
y modifique los métodos en la clase AccountController
.
2. ¿Qué es lo diferente? ¿Por qué no sigue usando métodos estáticos de Membresía? ¿Por qué tiene que cambiar a WebSecurity?
A: ASP.NET MVC 4 Ahora usa un nuevo proveedor de membresía: SimpleMembershipProvider.