Proveedor de membresía personalizada in.NET 4,0


Hay algunos hilos aquí en so sobre este asunto, pero la mayoría de ellos están desactualizados y los enlaces de referencia en ellos son aún más desactualizados.

Tengo este sitio web que necesito conectar a un servidor sql externo (mssql) con su propia estructura de tabla, utilizando el valor predeterminado asp.net la estructura del proveedor de membresía no es una opción. El diseño de la tabla es muy simple y la tabla de usuario se ve así (se llama Individuos)

Individuals
- UserGuid (uniqueidentifier/guid, unique)
- Name (varchar)
- Password (varchar)
- HasAccess (tinyint/ 1 or 0)
- DateTime (datetime)
- Log (xml)

La funcionalidad requerida es simplemente registrar alguien en, el resto no es necesario:)

Seguí algunas guías, pero la mayoría de ellas son anticuadas y muy complejas. Desafortunadamente, los ejemplos de msdn siguen este patrón y la documentación no es muy buena.

Así que si alguien tiene algunos recursos que muestran cómo, o están dispuestos a publicar muestras de código o similares aquí se lo agradecería.

Gracias!

Author: user850010, 2011-04-18

2 answers

Es muy simple en realidad:

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

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

  3. Crea automáticamente los métodos necesarios (punto + espacio en la clase inherit)

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, I defina el GetUser como se muestra a continuación:

public override MembershipUser GetUser(string username, bool userIsOnline)
{
    return db.GetUser(username);
}

dbes mi Repositorio de Base de datos que agregué a la clase como

MyServicesRepository db = new MyServicesRepository();

Allí, encontrarás 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 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>

Usted tiene un buen Video Tutorial de Chris Pels (fechado en 2007, pero todavía es mayormente válido) y código para esto también, 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 Creé mi Proveedor de Roles también, que como puedes ver en el código anterior, es tan simple como la membresía y te dejamos, en tu aplicación usa 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 crear automáticamente los métodos necesarios (punto + espacio en la clase inherit)

Puede hacer clic con el botón derecho del ratón o colocar el cursor sobre el nombre y presionar Control + . y luego espacio.

 62
Author: balexandre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 10:21:44

Hay algunos hilos aquí en so sobre este asunto, pero la mayoría de ellos son anticuado y los enlaces de referencia en son aún más anticuados.

Desde la introducción de ASP.NET en el Marco 1.0 la Página.User / CurrentSession.El modelo User / IPrincipal / IIdentity no cambia. En el Marco 2.0 se agregó el proveedor de membresía. Esas referencias "anticuadas" siguen siendo una guía válida. MSDN

 0
Author: Cos Callis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-18 10:56:55