asp.net - usuario - Custom MembershipProvider en.NET 4.0
membership visual studio 2017 (2)
Hay algunos temas aquí sobre este tema, pero la mayoría de ellos están desactualizados y los enlaces de referencia en ellos están aún más desactualizados.
Obtuve este sitio web que necesito conectar a un servidor sql externo (mssql) con su propia estructura de tabla, usando la estructura de proveedor de membresía asp.net predeterminada no es una opción. El diseño de la mesa es realmente simple y el nombre de servicio se ve así (se llama Individuals)
Individuals
- UserGuid (uniqueidentifier/guid, unique)
- Name (varchar)
- Password (varchar)
- HasAccess (tinyint/ 1 or 0)
- DateTime (datetime)
- Log (xml)
La funcionalidad requerida es simplemente registrar a alguien, el resto no es necesario :)
Seguí algunas guías, pero la mayoría de ellas son obsoletas y muy complejas. Lamentablemente, los ejemplos msdn siguen este patrón y la documentación no es muy buena.
Entonces, si alguien tiene algunos recursos que demuestren cómo hacerlo, o si está dispuesto a publicar muestras complementarias o similares aquí, lo agradecería.
¡Gracias!
Hay algunos temas aquí sobre este tema, pero la mayoría de ellos están desactualizados y los enlaces de referencia en ellos están aún más desactualizados.
Desde la introducción de ASP.NET en Framework 1.0, el modelo Page.User / CurrentSession.User / IPrincipal / IIdentity no se modifica. En Framework 2.0 se agregó el proveedor de Membresía. Esas referencias "desactualizadas" siguen siendo una guía válida. MSDN
Es muy simple realmente:
Cree un nuevo archivo Class (si no está usando un sistema de varias capas, en la carpeta Models de su proyecto)
MyMembershipProvider.cs
Heredar esa clase de
System.Web.Security.MembershipProvider
crea automáticamente los métodos necesarios (período + espacio en la clase heredada)
¡Hecho!
Todos los métodos tendrán la excepción NotImplementedException
, todo lo que necesita hacer es editar cada uno y poner su propio código. Por ejemplo, defino el GetUser
como se muestra a continuación:
public override MembershipUser GetUser(string username, bool userIsOnline)
{
return db.GetUser(username);
}
db
es mi Repositorio de base de datos que agregué a la clase como
MyServicesRepository db = new MyServicesRepository();
allí, encontrará el método GetUser
como:
public MembershipUser GetUser(string username)
{
OS_Users user = this.FindUserByUsername(username);
if (user == null)
return
new MembershipUser(
providerName: "MyMembershipProvider",
name: "",
providerUserKey: null,
email: "",
passwordQuestion: "",
comment: "",
isApproved: false,
isLockedOut: true,
creationDate: DateTime.UtcNow,
lastLoginDate: DateTime.UtcNow,
lastActivityDate: DateTime.UtcNow,
lastPasswordChangedDate: DateTime.UtcNow,
lastLockoutDate: DateTime.UtcNow);
return
new MembershipUser(
providerName: "MyMembershipProvider",
name: user.username,
providerUserKey: null,
email: user.email,
passwordQuestion: "",
comment: "ANYTHING you would like to pass",
isApproved: true,
isLockedOut: user.lockout,
creationDate: user.create_date,
lastLoginDate: user.lastLoginDate,
lastActivityDate: user.lastActivityDate,
lastPasswordChangedDate: user.lastPasswordChangedDate,
lastLockoutDate: user.lastLockoutDate);
}
Haga esto para todos los métodos que use (depure el proyecto y vea cuáles necesita) - Solo uso algunos, no todos, ya que realmente no me importan los métodos como ChangePasswordQuestionAndAnswer
, DeleteUser
, etc.
solo asegúrese de que en su web.config
agregue la nueva Membresía como:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" connectionStringName="OnlineServicesEntities"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
Tienes un buen Video Tutorial de Chris Pels (fechado en 2007 pero aún es válido en su mayoría) y también código para esto, aunque Video Tutorial está en VB, pero vamos a entender los pasos ...
http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider
No solo creé mi propio proveedor de membresía, sino que también creé mi proveedor de roles , ya que como puede ver en el código anterior, es tan simple como MemberShip y le permite a usted, en su aplicación, utilizar cosas como:
[Authorize(Roles = "Partner, Admin")]
public ActionResult MyAction()
{
}
y
@if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin"))
{
<div>You''re an ADMIN, Congrats!</div>
}
¿Qué es automágicamente crear los métodos necesarios (período + espacio en la clase de herencia)
Puede hacer clic con el botón derecho o tener el cursor sobre el nombre y presionar Control + . y luego espacio .