今天我來到了我的世界。 基本上,我使用EntityFramework中包含的默認ApplicationUserContext,並且在向用戶添加角色時,主題需要註銷角色以更新。事實上,這是正常的,因爲角色存儲在cookie中,每隔30分鐘或用戶每次登錄時加載信息。實體框架中的ApplicationUserContext爲null
所以在我的情況下,我試圖將特定角色添加到用戶,使用角色管理器,然後強制「辭職」,即註銷然後登錄。
_userManager.AddToRole(UserID, "the role of the world");
ApplicationUser theUser = _userManager.FindById(User.Identity.GetUserId());
if (returnUrl != null)
{
AccountController ac = new AccountController();
await ac.Relogin(theUser);
return Redirect(returnUrl);
}
現在你看,我創建的AccountController的新實例,因爲我是在其他控制器和調用的方法「重新登錄(用戶)」
public async Task Relogin(ApplicationUser _user)
{
await SignInAsync(_user, false);
}
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, await user.GenerateUserIdentityAsync(UserManager));
}
現在,當我運行代碼,我得到的錯誤「對象引用不設置到對象的實例在此代碼:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
這基本上意味着我的HttpContext爲空...我嘗試甚至還讓HttpContext的在我的控制器的d以這樣的參數發送。它在控制器中不是null,但一旦它進入AccountController,userManager變爲空......發生了什麼?
public async Task Relogin(ApplicationUserManager _userManager)
你爲什麼要創建一個'AccountController'的新實例?爲什麼不直接調用'SignInAsync'然後重定向呢? –
是的,我應該從一開始就這樣做!謝謝 – MasterJohn