Asp.net-Mvc

在 ASP.NET 身份框架中更改時刷新目前使用者的角色?

  • July 9, 2015

使用 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 行後,我可以確認使用者已添加到表中dbo.AspNetUserRoles。但是,使用者在到達成員控制器時無法通過角色檢查。 User.IsInRole("Members")返回假。

如果使用者註銷然後再次登錄,則對成員控制器的訪問將通過,即User.IsInRole("Members")現在返回 true。

有記憶體嗎?為什麼延遲?我該如何克服它?

我還嘗試將 Line X 的方法轉換為非同步方法並使用UserManager.AddToRoleAsync. 同樣的延遲效果仍然存在。

使用者登錄時將身份資訊(角色,聲明)放入 cookie。由於使用者已經登錄,這行程式碼UserManager.AddToRole(User.Identity.GetUserId(), "Members")將更新 db,但不會更新 cookie。您必須重新發布 cookie。

嘗試添加SignInManager.SignIn(user, false, false);(如果你沒有使用者,var user = UserManager.FindById(User.Identity.GetUserId()))之前RedirectToAction("Index", "Members");

引用自:https://stackoverflow.com/questions/29285406