visual usuario studio net custom contraseƱa aspnet asp asp.net asp.net-membership membership-provider

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:

  1. Cree un nuevo archivo Class (si no está usando un sistema de varias capas, en la carpeta Models de su proyecto) MyMembershipProvider.cs

  2. Heredar esa clase de System.Web.Security.MembershipProvider

  3. 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 .