2012-06-13 12 views
5

Cuando hago un sitio que requiere registro e inicio de sesión, para algo rápido sin muchos requisitos, utilizaré Membresía con atributos [Autorizar] y todo eso. Funciona bien para lo que hace. Pero ahora estoy queriendo algo más. Básicamente estoy desarrollando un sitio usando ASP.NET MVC EF CodeFirst y quiero crear una entidad de usuario para que persista en el DB que contiene mucha más información. Dicha información requerida al registrarse tendría propiedades adicionales tales como Nombre, Apellido, Género, País, etc ....NET Membresía personalizada vs. Inicio de sesión/registro personalizado: Autenticación/Autorización

He intentado leer sobre la implementación de un MembershipProvider y MembershipUser personalizados, etc ... He ido tan lejos pero simplemente no se está uniendo como quiero al final. Ahora, cuando desarrolle un sitio en PHP o, en otras ocasiones, en ASP.NET, crearé mi clase de usuario y le daré todas las propiedades necesarias para la página de registro y simplemente la enviaré a la base de datos. Luego, cuando inicio sesión solo tomo el nombre de usuario o el correo electrónico y la contraseña, y simplemente creo una variable de sesión que indica si el usuario está autorizado o no.

¿Está bien que hacer? Simplemente no entiendo por qué toda esta Membresía es mucho más complicada de lo que parece ser, así que siento que me estoy perdiendo el sentido de todo. Además, noto en una aplicación web ASP.NET MVC que cuando estás autenticado que escribe esta línea ....

FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false); 

¿Cuál es la diferencia entre eso y ...

Session["username"] = model.UserName 

Respuesta

2

En lugar de ir por la ruta de un proveedor de membresía (personalmente no me gusta y me parece demasiado pesado para las aplicaciones con las que trabajo) ha considerado simplemente crear un objeto personalizado IPrinicipal/IIdentity para su aplicación y ampliarlos con el propiedades que desea de su objeto "Usuario"?

En lugar de entrar en los detalles ya hay algunos grandes recursos en la cubierta de manera que este concepto: ASP.NET MVC - Set custom IIdentity or IPrincipal

En lo que respecta a su pregunta, Session["username"] es simplemente una cookie de sesión. Usted pierde todos los beneficios de FormsAuthentication. Por ejemplo, con formularios auth si el usuario solicita una página que requiere acceso autenticado y ese usuario no ha iniciado sesión previamente en el sitio, entonces el usuario se redirige a una página de inicio de sesión configurada con formularios auth.

Con Session["username"], deberá realizar manualmente todos los aspectos de la autenticación. Yo recomendaría NO hacer esto.

+1

Bueno, supongo que me voy a leer aún más ... Parece que cada vez que creo que he decidido algo, se sugiere algo más y nunca sé qué camino tomar para garantizar un rendimiento óptimo a largo plazo ... Gracias por tu respuesta. –

+0

Una cosa que olvidé mencionar es que usar FormsAuthentication y establecer el actual IIdentity e IPrincipal le permitirá acceder al "Usuario actual" en cada solicitud (similar a su comentario php). Por ejemplo, para obtener el "nombre de usuario" actual, simplemente usaría User.Identity.Name dentro de su controlador. – Jesse

Cuestiones relacionadas