2014-12-03 2 views
0

Я очень новичок в .NET и безопасности. Я решил реализовать проверку подлинности с помощью форм (исправьте меня, если я должен использовать что-то еще). Из того, что я собрал в интернете, я сделал следующее, но он не работает:MVC5 Ошибка аутентификации форм

Web.config

<authentication mode="Forms"> 
    <forms loginUrl="~/Home/Index" timeout="30" /> 
</authentication> 

HttpPost Аякса Войти метод:

[HttpPost] 
     public ActionResult Login(LoginInputModel loginModel) 
     { 
      if (ModelState.IsValid) 
      { 
       var success = UserService.Login(loginModel.Password, loginModel.Email); 
       if (success) 
       { 
        return Json(new { Url = Url.Action("Index","Home") }); 
       } 
       loginModel.ErrorMessages = "Failed to log in with these credentials. Please try again."; 
       return PartialView("Widgets/Login/_LoginInput", loginModel); 
      } 
      return PartialView("Widgets/Login/_LoginInput", loginModel); 
     } 

с фактическим кодом авторизации в UserService класс:

public static bool Login(string password, string email) 
     { 
      var user = Connector.GetUserByCredentials(password, email); 
      if (user == null) return false; 
      FormsAuthentication.SetAuthCookie(email, false); // this line 
      SessionService.Delete(UserSessionKey); 
      SessionService.Store(UserSessionKey, UserMapper.DbUserToUser(user)); 
      return SessionService.HasKey(UserSessionKey); 
     } 

Всякий раз, когда я нажимаю логин, он работает нормально (он обновляет страницу и Я вижу другой контент), но если я перейду на другую страницу, я снова перенаправляюсь на страницу входа в систему. Что я (не) делаю неправильно?

Если вам нужно больше кода, я с удовольствием опубликую его.

+0

Почему вы должны '<формы loginUrl = "~/Home/Index" тайм-аут = "30"/>'? Это должен быть метод 'Login()' вашего контроллера, например. '/ Account/Login' –

+0

Главная страница/Индекс - это первая страница, содержащая виджет входа в учетную запись/Логин, поэтому, если я хочу перенаправить на страницу входа в систему, это должен быть Home/Index – PoeHaH

ответ

11

Когда вы говорите, что используете MVC5, какую версию Visual Studio вы используете? Вы используете приложение, которое было создано мастером по умолчанию?

Если приложение было создано мастером по умолчанию, то по умолчанию он включает идентификатор ASP.NET и удаляет модуль FormsAuthentication из обработки. Если вы хотите продолжать использовать FormsAuth, вам нужно удалить ключ «удалить» из web.config для модуля FormsAuthentication.

Вы должны удалить эту линию

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> <----**** 
    </modules> 
</system.webServer> 
+0

Это действительно проблема:) Я чувствую себя глупо сейчас ^^ – PoeHaH

+1

@PoeHaH - не нужно, это неясно ... большинство людей просто используют идентификатор ASP.NET и не пытаются вернуться к FormsAuthentication. –

+0

Должен ли я оставить формы auth позади, а также перейти к Identity? Есть ли хороший учебник для начинающих, как я могу создать свою собственную пользовательскую базу данных с Identity? – PoeHaH

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