基於默認的Identity框架,我想在用戶登錄到應用程序時設置會話變量。如何設置會話變量,當用戶在asp中使用'記住我'cookie登錄mvc
這非常適用:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if(ModelState.IsValid)
{
// Validate the password
IdentityResult result = await IdentityManager.Authentication.CheckPasswordAndSignInAsync(AuthenticationManager, model.UserName, model.Password, model.RememberMe);
if(result.Success)
{
//save display name in session view
SiteUser user = await _siteDbContext.Users.SingleOrDefaultAsync(u => u.UserName == model.UserName);
Session["displayName"] = user.DisplayName;
return RedirectToLocal(returnUrl);
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
而它與這條線顯示在網站的最上面一欄:
@Html.ActionLink(Session["displayName"].ToString(), "Manage", "Account", null)
然而,當我登錄與「記住我」選項選中,關閉瀏覽器並重新啓動它,會話變量不會被設置,頁面會拋出一個空引用異常。
挖掘一點,它看起來好像將/Account/Login
操作設置爲默認登錄路徑,但它永遠不會被cookie身份驗證調用。
我該如何才能在身份驗證過程的中間或之後 - 設置我的會話變量?
顯然Session對象不設置,因爲登錄行動得到由認證系統規避。我可以編輯它,還是必須進行檢查並在每個控制器中設置Session值? –
Aaaaand我無法在用戶發出的第一個請求中引用Session對象。有沒有辦法強制創建Session對象? –