asp.net-mvc asp.net-identity roleprovider

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í.