¿Cómo hacer la gestión de sesiones en identidad aspnet?
estoy usandoIdentidad Asp.net paraIniciar sesión, Registrarse, Olvidé mi contraseña etc. y el código fuente se toma de este enlace a continuación:
Ahora tengo 1 tabla que es UserMaster y durante el registro solicito los siguientes campos:Nombre completo, ID de correo electrónico, Contraseña, Número de contacto, Género.
Mi UserMaster contiene los siguientes campos:Id, FullName, EmailId, ContactNumber, Gender
Ahora, cuando el usuario envíe el formulario de registro, este nombre completo, correo electrónico, número de contacto y género se guardarán enUserMaster junto conCorreo electrónico, la contraseña se guardará en AspnetUser.
Mi método de registro es el mismo que se proporciona en los 2 enlaces anteriores.
Aquí puedes notar que haysin relación entre mi UserMaster y AspnetUser así que durante el inicio de sesión, cuando el usuario ingrese su ID de correo electrónico para iniciar sesión, usaré este métodoawait SignInManager.PasswordSignInAsync
para verificar el usuario y si este método devuelve el éxito, lo que haré es usar esta identificación de correo electrónico y verificar este correo electrónico en mi UserMaster y, si se encuentra una coincidencia, buscaré ese UserId de UserMaster y lo almacenaré en la sesión y usaré mi aplicación en mi método de inicio de sesión como a continuación:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
using (var context = new MyEntities())
{
var fetchUSerId = context.UserMaster.Where(t => t.Email == model.Email).Select(t=>t.UserId).SingleOrDefault();
Session["UserId"] = fetchUSerId;
}
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
Estoy hablando de esto en mi método de inicio de sesión:
case SignInStatus.Success:
using (var context = new MyEntities())
{
var fetchUSerId = context.UserMaster.Where(t => t.Email == model.Email).Select(t=>t.UserId).SingleOrDefault();
Session["UserId"] = fetchUSerId;
}
¿Es esta una forma adecuada o aún mejor? Quiero almacenar todo el objeto de usuario en lugar de solo almacenar el Id. De usuario.
Entonces, ¿alguien puede decirme cómo hacer esto con identidad de aspnet?