asp.net mvc - ¿Actualizar la función del usuario actual cuando se cambia en el marco de identidad ASP.NET?
asp.net-mvc asp.net-identity (1)
La información de identidad (roles, reclamos) se coloca en la cookie cuando el usuario inicia sesión. Dado que el usuario ya ha iniciado sesión, esta línea de código
UserManager.AddToRole(User.Identity.GetUserId(), "Members")
actualizará db, pero no la cookie.
Debe volver a emitir la cookie.
Intente agregar
SignInManager.SignIn(user, false, false);
(si no tiene usuario,
var user = UserManager.FindById(User.Identity.GetUserId())
) antes de
RedirectToAction("Index", "Members");
Usando VS 2013, la plantilla MVC estándar y el marco del proveedor de Identidad
El usuario ha iniciado sesión y tengo:
//....
UserManager.AddToRole(User.Identity.GetUserId(), "Members"); # Line X
RedirectToAction("Index", "Members");
Y el controlador de Miembros es el siguiente:
[Authorize(Roles="Members")]
public class MembersController : Controller
{
// GET: Members
public ActionResult Index()
{
return View();
}
}
Después de ejecutar Line X, puedo confirmar que el usuario se agrega a la tabla
dbo.AspNetUserRoles
.
Sin embargo, el usuario al llegar al controlador Miembros falla la verificación de roles.
User.IsInRole("Members")
devuelve falso.
Si el usuario cierra la sesión y luego vuelve a
User.IsInRole("Members")
, se realizará el acceso al controlador Miembros, es decir,
User.IsInRole("Members")
ahora devuelve verdadero.
¿Hay algo de caché? ¿Por qué la demora? ¿Cómo lo supero?
También intenté convertir el método en la línea X a un método asíncrono y usé
UserManager.AddToRoleAsync
.
El mismo efecto retardado sigue ahí.