Роли пользователей исчезли после перезапуска ASP.NET Приложение

#c# #.net #asp.net-mvc #cookies #roles

#c# #.net #asp.net-mvc #файлы cookie #роли

Вопрос:

Я работаю над проектом, в котором разные роли пользователей. У меня есть ссылка администратора, которая отображается, если пользователь является администратором, и скрыта, если нет. Я использую:

          <li>@Html.ActionLink("Home", "Index", "Home")</li>
         <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
          @if (Request.IsAuthenticated amp;amp; User.IsInRole("Admin"))
            {
                <li>@Html.ActionLink("Admin", "AdminIndex", "Account")</li>
            }
  

При первоначальном входе в систему все работает нормально, однако, когда я запускаю проект локально и останавливаю его, а затем перезапускаю, мое имя пользователя (с ролью администратора) все еще входит в систему, однако ссылка администратора исчезает, и мне приходится выйти из системы, а затем снова войти в систему с тем же пользователем, чтобы отобразить ссылку администратора. Есть ли какой-либо способ заставить его запоминать роль пользователя при перезапуске проекта.

Я думаю, что способ запоминания имени пользователя и пароля при перезапуске проекта заключается в моем контроллере:

 [HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
  if (ModelState.IsValid amp;amp; 
  WebMatrix.WebData.WebSecurity.Login(model.UserName, model.Password, 
  persistCookie: model.RememberMe))
  {
    return RedirectToLocal(returnUrl);
  }


  ModelState.AddModelError("", "The user name or password provided is 
  incorrect.");
  return View(model);
}  
  

Но я не уверен, потому что это было встроено в проект. Нужно ли мне добавить действие для ссылки на мои роли пользователей, имеющее какое-либо отношение к cookie в моей модели для подражания, например, в модели входа в систему?

Комментарии:

1. может быть, использовать session timeout ? Сохраните intial_login_time/last_active_time пользователя и перед обслуживанием любой страницы проверьте, находится ли эта разница во времени в пределах таймаута, таким образом, при перезапуске приложения intial_login_time значение будет нулевым…

2. На самом деле я смог сделать это с помощью [InitializeSimpleMembership] на HomeController, только это было на контроллере учетной записи