2010-04-22 17 views
8

Estoy creando una aplicación ASP.NET MVC. Debido a la autorización compleja, estoy tratando de construir mi propio sistema de inicio de sesión. No estoy usando proveedores de membresía ASP.NET, y las clases relacionadas)Realizar un seguimiento de los usuarios que han iniciado sesión

Soy capaz de crear nuevas cuentas en la base de datos con contraseñas hash.

¿Cómo puedo hacer un seguimiento de que un usuario haya iniciado sesión?

¿Está generando un número aleatorio largo y poniendo esto con el ID de usuario en la base de datos y con la cookie suficiente?

+0

Tu inglés es muy bueno :) – roryf

+2

Si quieres personalizar la autenticación de ASP.NET, entonces * debes * utilizar un proveedor de membresía, incluso si tienes que escribirlo tú solo. http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ –

Respuesta

7

Después de validar las credenciales de usuario que puede tener un código como:

public void SignIn(string userName, bool createPersistentCookie) 
{ 
    int timeout = createPersistentCookie ? 43200 : 30; //43200 = 1 month 
    var ticket = new FormsAuthenticationTicket(userName, createPersistentCookie, timeout); 
    string encrypted = FormsAuthentication.Encrypt(ticket); 
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted); 
    cookie.Expires = System.DateTime.Now.AddMinutes(timeout); 
    HttpContext.Current.Response.Cookies.Add(cookie); 
} 

Así que su código puede ser como este:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult LogOn(string userName, string passwd, bool rememberMe) 
{ 
    //ValidateLogOn is your code for validating user credentials 
    if (!ValidateLogOn(userName, passwd)) 
    { 
     //Show error message, invalid login, etc. 
     //return View(someViewModelHere); 
    } 

    SignIn(userName, rememberMe); 

    return RedirectToAction("Home", "Index"); 
} 

En las solicitudes posteriores del usuario conectado, HttpContext.User .Identity.Name debe contener el nombre de usuario del usuario conectado.

¡Recuerdos!

+0

¡Guau, muchas gracias! ¡¡¡Muy útil!!! –

+0

Muy útil gracias. Pero, ¿qué hago al cerrar sesión? – HelpASisterOut

+0

@HelpASisterOut FormsAuthentication.SignOut(); FormsAuthentication.RedirectToLoginPage() – uvita

Cuestiones relacionadas