2009-03-09 22 views
8

Almacenar datos de usuario en una tabla MSSQL llamada Usuarios. Lo que quiero es tener acceso a todos los datos del usuario para el usuario realmente registrado (correo electrónico, dirección, teléfono, si el usuario está suscrito, etc.).Membresía, Membresía Proveedor y Membresía ¿Relaciones con el usuario en ASP.NET?

No quiero usar perfiles, así que decidí usar MembershipProvider personalizado (¿o conoces alguna forma mejor, menos dolorosa?).

Lo que no entiendo es membresía y membresía. Si heredé de MembershipProvider, en métodos modificados controlo los datos de acceso desde y hacia la base de datos.

¿Pero cómo uso la clase heredada de MembershipProvider? Si quiero para autenticar el usuario mediante el uso de miembros, que debería hacer:

if(Membership.ValidateUser(string username, string password)) 
{ 
    FormsAuthentication.RedirectFromLoginPage(string username, string password); 
} 

pero ¿dónde está la clase heredada de MembershipProvider? ¿Y cuándo usar una clase heredada de MembershipUser? ¿Y cuál es la relación entre la Membresía y MembershipProvider?

Respuesta

8

Si bien no es claro como el cristal on MSDN, no es tan complicado. Hay un trío de clases:

  • Membresía: proporciona métodos de utilidad y un punto de entrada, básicamente un Singleton (clase estática).
  • MembershipProvider: actúa como un acceso de datos y una fábrica para los objetos de MembershipUser.
  • MembershipUser: representa un usuario individual.

Se selecciona un MemberhipProvider personalizado (por código en Membresía) en función de la configuración de su aplicación: configuration/system.web/membership. Aquí es donde pone en juego a su proveedor. La implementación de MembershipProvider debe escribirse para acceder al almacén de datos que prefiera para los usuarios: su tabla de usuario en este caso.

Membresía Los objetos de usuario solo se crean a través de MembershipProvider. El método MembershipProvider.ValidateUser() debe verificar con su almacén de datos que la combinación de usuario/contraseña es válida. El MembershipProvider.GetUser() recupera información del usuario: utilícela en una página protegida y pase en System.Web.HttpContext.Current.User.Identity.Name como el usuario autenticado actual.

Dicho esto, espero que esté seguro de que no desea use Profiles, y realmente desea tener una tabla de usuario separada. Si está escribiendo una aplicación interna, el uso de un almacén de datos habilitado Active Directory o LDAP reduciría los costos de administración y probablemente los riesgos de seguridad. Hay cientos de cosas que puede hacer mal fácilmente al ir a la ruta MembershipProvider. ¿Usas salted hashes? ¿Cómo está protegiendo la tabla de usuarios contra la manipulación? MSDN cubre solo una fracción del security issues que pueda enfrentar.

+0

Gracias, esto ayuda mucho. Ahora entiendo. Eso es más fácil de lo que parece ser. Muchas gracias. –

1

El proveedor específico utilizado se controla en web.config. En realidad, puede establecer más de 1 proveedor y tener uno predeterminado. Compruebe: http://msdn.microsoft.com/en-us/library/6e9y4s5t.aspx.

Cuando se lo llame así, la membresía solo usa el proveedor predeterminado. Usted heredaría MembershipUser, si desea proporcionar información adicional para el usuario, pero eso vinculará el resto de su código a su proveedor específico.

Cuestiones relacionadas