2013-10-15 4 views
2

Основываясь на структуре 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.

Как я могу попасть в середине или вправо после процесса аутентификации и установить свою переменную сеанса?

+0

Видимо объект Session не приготовьтесь, потому что действие получает Войти обойдена системой аутентификации. Могу ли я его отредактировать, или мне нужно поставить чек и установить значение Session в каждом контроллере? –

+0

Aaaaand Я не могу ссылаться на объект Session по первому запросу, который пользователь делает. Есть ли способ принудительного создания объекта Session? –

ответ

-1

Использовать форму аутентификации Httpcookies. Также проверьте вход в систему. Действие: существуют ли файлы cookie или нет.

Если существует, то извлеките имя пользователя из файлов cookie и поднимите сеанс еще раз.

для formauthentication Httpcookies click here

+1

Так что я должен заменить встроенную систему с помощью ручной работы? Поскольку установка точки останова в действии Login не срабатывает вообще при входе в файл cookie. –

Смежные вопросы