【问题标题】:Refresh current user's role when changed in ASP.NET identity framework?在 ASP.NET 身份框架中更改时刷新当前用户的角色?
【发布时间】:2015-03-26 17:47:31
【问题描述】:

使用 VS 2013、标准 MVC 模板和身份提供者框架

用户已登录,我已:

//....
UserManager.AddToRole(User.Identity.GetUserId(), "Members");       # Line X
RedirectToAction("Index", "Members");

Members 控制器如下:

[Authorize(Roles="Members")]
public class MembersController : Controller
{
    // GET: Members
    public ActionResult Index()
    {
        return View();
    }
}

执行 X 行后,我可以确认用户已添加到表 dbo.AspNetUserRoles 中。但是,用户在到达成员控制器时无法通过角色检查。 User.IsInRole("Members") 返回 false。

如果用户注销然后再次登录,则对成员控制器的访问将通过,即User.IsInRole("Members") 现在返回 true。

有缓存吗?为什么延迟?我该如何克服它?

我还尝试将第 X 行的方法转换为异步方法并使用UserManager.AddToRoleAsync。同样的延迟效果仍然存在。

【问题讨论】:

    标签: asp.net-mvc asp.net-identity roleprovider


    【解决方案1】:

    身份信息(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())

    【讨论】:

    • 这实际上应该是应该为 Role.AddUserToRole() 方法解释的东西。或“小心!”文档中的框。
    • 1 个问题:大多数角色是由其他人分配的,有没有一种简单的方法使用 Identity 向用户发送某种通知以刷新他的 cookie?
    • 如果我们需要在我们的站点中实现基于角色的订阅(即..用户购买订阅,我们需要在不登录的情况下显示额外的预兆)这将使用完整的@CularBytes。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2020-02-13
    相关资源
    最近更新 更多