在 ASP.NET 身份框架中更改时刷新当前用户的角色?
Refresh current user's role when changed in ASP.NET identity framework?
使用 VS 2013、标准 MVC 模板和身份提供程序框架
用户已登录,我有:
//....
UserManager.AddToRole(User.Identity.GetUserId(), "Members"); # Line X
RedirectToAction("Index", "Members");
会员控制器如下:
[Authorize(Roles="Members")]
public class MembersController : Controller
{
// GET: Members
public ActionResult Index()
{
return View();
}
}
X行执行后,我可以确认用户被添加到tabledbo.AspNetUserRoles
。但是,用户在到达 Members 控制器时未能通过角色检查。 User.IsInRole("Members")
returns 错误。
如果用户注销然后再次登录,那么对 Members 控制器的访问将通过,即 User.IsInRole("Members")
现在 returns true。
有缓存吗?为什么延迟?我该如何克服它?
我还尝试将第 X 行的方法转换为异步方法并使用 UserManager.AddToRoleAsync
。同样的延迟效果还在。
身份信息(roles,claims)在用户登录时放入cookie中。由于用户已经登录,这行代码UserManager.AddToRole(User.Identity.GetUserId(), "Members")
将更新db,但不会更新cookie .您必须重新发布 cookie。
尝试在 RedirectToAction("Index", "Members");
之前添加 SignInManager.SignIn(user, false, false);
(如果您没有用户,var user = UserManager.FindById(User.Identity.GetUserId())
)
使用 VS 2013、标准 MVC 模板和身份提供程序框架
用户已登录,我有:
//....
UserManager.AddToRole(User.Identity.GetUserId(), "Members"); # Line X
RedirectToAction("Index", "Members");
会员控制器如下:
[Authorize(Roles="Members")]
public class MembersController : Controller
{
// GET: Members
public ActionResult Index()
{
return View();
}
}
X行执行后,我可以确认用户被添加到tabledbo.AspNetUserRoles
。但是,用户在到达 Members 控制器时未能通过角色检查。 User.IsInRole("Members")
returns 错误。
如果用户注销然后再次登录,那么对 Members 控制器的访问将通过,即 User.IsInRole("Members")
现在 returns true。
有缓存吗?为什么延迟?我该如何克服它?
我还尝试将第 X 行的方法转换为异步方法并使用 UserManager.AddToRoleAsync
。同样的延迟效果还在。
身份信息(roles,claims)在用户登录时放入cookie中。由于用户已经登录,这行代码UserManager.AddToRole(User.Identity.GetUserId(), "Members")
将更新db,但不会更新cookie .您必须重新发布 cookie。
尝试在 RedirectToAction("Index", "Members");
SignInManager.SignIn(user, false, false);
(如果您没有用户,var user = UserManager.FindById(User.Identity.GetUserId())
)