Основываясь на структуре Identity по умолчанию, я хотел бы установить переменную сеанса, когда пользователь входит в приложение.Как установить переменную сеанса, когда пользователь входит в систему с «Запомнить меня» cookie в asp 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? –