用户 IsInRole 仅在从网站登录和注销后才有效

User IsInRole only works after signing in and out from the website

我在我的控制器代码和我的共享 _Layout 视图中添加和删除角色的用户,我正在使用 User.IsInRole 相应地检查和删除链接,但它只有在用户退出网站时才有效User.IsInRole returns 结果正确?

有没有办法重新加载 _Layout 页面以使其正确抓取数据?

控制器更改角色的代码

  _userManager.RemoveFromRole(obj.strUserID, "Consumer");
  _userManager.AddToRole(obj.strUserID, "Provider");
  _context.SaveChanges();
  return View("Success");

多个页面使用的共享布局视图

  if (!User.IsInRole("Provider"))
      {
       <li>@Html.ActionLink("Become a Member", "Memmber", "CustProfile")</li>
      }

有一次,我为用户删除并添加了新角色,我希望 _Layout.cstml 显示正确的链接,但它没有。如果我退出并重新登录,它工作正常。

有没有办法解决这个问题?

用户在注销前会被缓存,因此您将不得不重新为他们签名。请使用以下代码再次签名。另外,请确保重定向它们而不是查看,以便重新加载页面。

 private ApplicationSignInManager _signInManager;

 public ApplicationSignInManager SignInManager
        {
            get
            {
                return _signInManager ?? 
                HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
            }
            private set
            {
                _signInManager = value;
            }
        }

更改角色后添加以下代码:

  var userinDb = _context.Users.Find(UserID);
  await SignInManager.SignInAsync(userinDb, true,false);
  return RedirectToAction("Success");