Я предполагаю, что проблема, которую я описываю, очень распространена, но я не могу найти решение, которое мне поможет. Я создал проект ASP.NET MVC, но вместо встроенной системы аутентификации я хотел бы создать свою собственную, поскольку у меня уже есть база данных, содержащая информацию о пользователях (имя пользователя, адрес электронной почты, пароль и т. Д.)Как установить Request.IsAuthenticated to true, когда я использую файлы cookie
Я хотел бы использовать FormsAuthentication и подключить его к моей собственной базе данных, которую, как я полагаю, уже сделал, но каждый раз, когда я отправляю новый запрос в приложение, свойство Request.IsAuthenticated всегда устанавливается как ложное.
Вот код, я использую:
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
using (var db = new dbEntities())
{
var result = db.Person.Any(x => x.Email == model.Email && x.Password == model.Password);
switch (result)
{
case true:
FormsAuthentication.SetAuthCookie(model.Email, true);
resetRequest();
return RedirectToLocal(returnUrl);
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
}
private void resetRequest()
{
var authCookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
if (authTicket != null && !authTicket.Expired)
{
var roles = authTicket.UserData.Split(',');
System.Web.HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(authTicket), roles);
}
}
}
И это работает очень хорошо, прежде, чем метод resetRequest() называется значение IsAuthenticated устанавливается как ложь, после того, как он называется он установлен как истинный. Проблема в том, что когда я перенаправляюсь на главную страницу с помощью возвращаемого RedirectToLocal (returnUrl), свойство снова ложно, и я не знаю, что делать, чтобы он был установлен как истинный.
Должен ли я вызвать метод типа resetRequest() в начале каждого метода в моем контроллере? Я не думаю, что это изящное решение. Может ли кто-нибудь помочь мне в этом?
Да у меня есть, и это не помогло. Мне удалось решить это с помощью кода, о котором я упоминал ранее. Спасибо. – avi