Pregunta

En un sitio web, necesito integrar membresía y autenticación. Así que quiero usar la funcionalidad de la Membresía ASP.NET, pero tengo otras cosas personalizadas, que un " usuario " Tiene qué hacerlo.

Así que estoy aquí sentado con mi lápiz y papel, dibujando líneas para mi modelo de dominio ... ¿Y cómo puedo utilizar mejor la membresía de ASP.Net, pero extenderla para satisfacer mis necesidades?

Debo crear una clase que herede de un MembershipUser y extenderla con mis propias propiedades y métodos (y guardarla en una tabla separada). ¿O debería permitir que MembershipUser sea una propiedad en mi objeto de Usuario / Cliente personalizado?

¿Cuál sería una buena manera sólida de hacer esto?

¿Fue útil?

Solución

Lo he pensado y hay 2 formas que parecen apropiadas (por supuesto, hay más formas de hacerlo funcionar).

Proveedor de membresía personalizado

Cambia el proveedor de membresía para que use el suyo propio y use su objeto Usuario para almacenar toda la información.

El problema con este es que implica una gran cantidad de re-implementación de cosas que ya están bien manejadas por Asp.Net. Lo bueno es que tienes un solo objeto de usuario con todos los detalles.

Enlace de un usuario de membresía a su usuario

Con este método, utilizarías el proveedor de Membresía original para manejar el nombre de usuario y la contraseña, pero vinculas tu propio objeto de Usuario con este con algo como el nombre de usuario utilizando un servicio, por ejemplo.

Es realmente fácil de configurar, solo necesitas crear un servicio que se usaría así:

string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);

Otros consejos

Terminé escribiendo mi propio proveedor de membresía, y lo he implementado en 3 soluciones diferentes ahora. Es extremadamente simple y mucho, mucho más elegante que vincular a un usuario con un usuario de membresía (que también he probado).

Lee esto ...:

Crear un Proveedor de Membresía Personalizado para ASP.NET Seguridad del sitio web

Y si desea obtener más información, vea este video (con código fuente) .

Extendí MembershipUser y creé mi propia versión de SqlMembershipProvider para asignarla a mi dominio existente, y está funcionando bien, en producción ahora.

MembershipUser es esencialmente una vista sobre mi tabla de usuarios. Mi clase extendida MembershipUser incluye propiedades de perfil / estilo de cuenta en lugar de usar el sistema predeterminado SqlProfileProvider, que es un poco frágil.

No pude usar las tablas de membresía existentes o sprocs, pero escribí la mía. Por ejemplo, el SqlMembershipProvider usa un GUID como clave opaca, pero el sistema de producción usa un int antiguo simple. Todas las fechas son UTC, etc. también.

Se accede a todas las funciones adicionales del usuario a través del dominio del usuario y no a través de los métodos de membresía.

HTH.

Actualmente estoy trabajando a través de la API de membresía de Microsoft ASP.NET 2.0 Artículo extendido de CoDe Magazine que explica cómo extender la API de membresía escribiendo un contenedor alrededor de las clases existentes. El principal beneficio es que puede mantener toda la funcionalidad lista para usar y no tener que volver a escribir la suya como lo haría al implementar un proveedor personalizado. Se proporciona el código fuente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top