Я очень новичок в .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);
}
Всякий раз, когда я нажимаю логин, он работает нормально (он обновляет страницу и Я вижу другой контент), но если я перейду на другую страницу, я снова перенаправляюсь на страницу входа в систему. Что я (не) делаю неправильно?
Если вам нужно больше кода, я с удовольствием опубликую его.
Почему вы должны '<формы loginUrl = "~/Home/Index" тайм-аут = "30"/>'? Это должен быть метод 'Login()' вашего контроллера, например. '/ Account/Login' –
Главная страница/Индекс - это первая страница, содержащая виджет входа в учетную запись/Логин, поэтому, если я хочу перенаправить на страницу входа в систему, это должен быть Home/Index – PoeHaH