2015-11-16 3 views
1

Я создаю сайт, на котором люди могут зарегистрироваться и войти. Я использую базу данных SQL Server с Entity Framework.ASP.NET MVC 5 - Как сохранить пользователя в журнале

Вот мое действие для входа в

[HttpPost] 
public ActionResult LoggingIn(User user) 
{ 
    ModelState.Clear(); 
    var result = MainLogic.LogIn(user); 
    if (result.MessegeID == 0) 
    { 
     RedirectToAction("Index"); 
    } 
    else 
     ViewBag.LoginInfo = result.Msg; 

    return View("Index"); 
} 

Теперь я хочу, чтобы войти в системе пользователя, чтобы войти в системе, для й раза. Я пытаюсь сделать это с помощью TempData [LoggedAs] = пользователя, и каждый раз, когда пользователь переключает вид, у меня есть TempData.Keep(), пока пользователь не выйдет из системы.

Я не думаю, что это хорошая практика, как еще я могу держать пользователя?

+5

Ну, похоже, вы изобрели колесо и закатили свою собственную систему аутентификации. Тогда вам также придется жить с последствиями, а также изобретать такие вещи, как «keep user logged in». Правильный ответ: _ «Использовать идентификатор ASP.NET» _, и если вы этого не хотите, вам нужно будет поделиться информацией о том, как работает ваша система аутентификации. – CodeCaster

ответ

1

При успешном входе в систему вам необходимо установить переменную сеанса. Затем вы проверяете, установлена ​​ли эта переменная сеанса, если нет, вы отправляете их на страницу входа. Это может вам помочь https://codereview.stackexchange.com/questions/51331/simple-authentication-in-asp-net-mvc-5

Это основная идея и надеюсь, что это имеет смысл для вас.

0

Я думаю, что использовать собственную систему аутентификации не рекомендуется, так как у вас мало знаний в этом штате, я рекомендую Identity управлять аутентификацией пользователей, при сохранении имени пользователя необходимо учитывать два момента:

  1. установите время истекает для печенья

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

public void ConfigureAuth(IAppBuilder app) 
    { 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      ExpireTimeSpan = new System.TimeSpan(90, 0, 0, 0), 
      CookieHttpOnly = false, 
      SlidingExpiration = true, 
      }); 
    } 
  1. Установить ключ машины в IIS, более подробно here
-2

Вы можете также использовать куки для управления протоколирования. создать печенье

HttpCookie cookie = new HttpCookie("Cookie"); 

щёток его значение, вы можете хранить идентификатор пользователя или каких-либо уникальных данных пользователя, которые вошли в систему.

cookie.Value = "user data"; 
cookie.Expires = DateTime.Now.AddSeconds(10);//You can set expire in seconds, hours or days etc. as per your choice. Cookie will get expire as per the time you have set. 

Набор в réponse добавить печенье.

this.ControllerContext.HttpContext.Response.Cookies.Add(cookie); 

Чтобы получить доступ к печенье Проверьте печенье, если существует

if (Request.Cookies["Cookie"] != null) { 


}else{ 

string temp = Request.Cookies["Cookie"].Value; // access the value of cookie 

} 
+0

_ «сохранить идентификатор пользователя» _ - ладно, позвольте мне изменить файл cookie на «1» или «admin». – CodeCaster

+0

Вы можете сохранить userID или «Admin», это зависит от логики и потока, который вы используете –

+1

Нет, я хочу сказать, что сохранение идентификатора пользователя (или имени пользователя) в cookie для целей аутентификации принципиально нарушено. Пользователь может редактировать свои файлы cookie, и таким образом сделать себя администратором. – CodeCaster

0

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

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