Невозможно выйти из приложения ASP.NET MVC с помощью FormsAuthentication.SignOut () - PullRequest
4 голосов
/ 08 октября 2010

Я пытаюсь реализовать функцию выхода из системы в ASP.NET MVC.

Я использую Аутентификацию по формам для своего проекта.

Это мой код выхода из системы:

FormsAuthentication.SignOut();
Response.Cookies.Clear();
FormsAuthenticationTicket ticket = 
    new FormsAuthenticationTicket(
        1,
        FormsAuthentication.FormsCookieName,
        DateTime.Today.AddYears(-1),
        DateTime.Today.AddYears(-2),
        true,
        string.Empty);

Response.Cookies[FormsAuthentication.FormsCookieName].Value = 
            FormsAuthentication.Encrypt(ticket); 
Response.Cookies[FormsAuthentication.FormsCookieName].Expires = 
            DateTime.Today.AddYears(-2);

return Redirect("LogOn");

Этот код перенаправляет пользователя на экран входа в систему. Однако если я вызову метод действия, указав имя в адресной строке (или выберу предыдущую ссылку в раскрывающемся списке адресной строки), я все равно смогу перейти на защищенные страницы без входа в систему.

Может ли кто-нибудь помочь мне решить проблему?

Ответы [ 4 ]

6 голосов
/ 08 октября 2010

Это странно ... Я делаю один единственный вызов: FormsAuthentication.SignOut ();и это работает ...

public ActionResult Logout() {
  FormsAuthentication.SignOut();
  return Redirect("~/");
}
1 голос
/ 17 июня 2011

Следующий вопрос связан с тем, что у меня работает решение

FormsAuthentication.SignOut () не выходит из системы пользователя

1 голос
/ 08 октября 2010

Чтобы правильно ответить на ваш вопрос, мне нужно знать, как вы защищаете свои "защищенные" страницы.
Я подозреваю, что вы там что-то делаете не так.

Простой вызов FormsAuthentication.SignOut() должно быть достаточно, так как он очищает куки аутентификации, тем самым делая другие вызовы методов, которые вы там делаете, избыточными.

В ASP.NET MVC вы должны использовать AuthorizeAttribute в методе действия, чтобы запретитьнеаутентифицированные посетители, чтобы использовать это.(Значение: старый способ, которым вы делали это с веб-формами, указав теги местоположения в Web.config , больше не работает с MVC .)

Например, вот небольшой фрагмент кода из моегоForumController класс:

public class ForumController : Controller
{
    ...

    [Authorize]
    public ActionResult CreateReply(int topicId)
    {
        ...
    }

    ...
}
0 голосов
/ 27 апреля 2018

Этот метод работает, если вы не отключите [comment] следующие теги в файле web.config , чтобы легко протестировать ваше веб-приложение.

public ActionResult SignOut()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}

web.config

<authentication mode="Forms">
  <forms name="Your Project Name" defaultUrl="/" loginUrl="/Users/Login" timeout="43200" />
</authentication>

<location path="Administrator">
  <system.web>
    <authorization>
      <allow roles="Administrator" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

<location path="UserPanel">
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</location>
...