Подтвердить что ты не робот

FormsAuthentication.SetAuthCookie не выполняет [Авторизовать] в MVC 5

Я создал новый проект ASP.NET MVC 5 для тестирования атрибута [Authorize] с помощью FormsAuthentication.SetAuthCookie. Я просто установил cookie в одном действии (в моем домашнем контроллере):

    public ActionResult About()
    {
        FormsAuthentication.SetAuthCookie("someUser", false);

И я ограничиваю доступ к другому:

    [Authorize]
    public ActionResult Contact()
    {

Когда я запускаю свою веб-страницу и перехожу к /home/contact, я правильно перенаправляюсь на страницу входа. Затем я перейду к /home/about, получу свой файл cookie и вернусь на страницу контактов. Но я все еще перенаправлен на страницу входа в систему - cookie не аутентифицирует/не разрешает мне.

В отладчике HttpContext.User.Identity.IsAuthenticated == false, когда я загружаю страницу About несколько раз (то есть, он никогда не считает меня аутентифицированной даже после установки файла cookie auth).

Есть ли еще один шаг, который нужно сделать здесь? Мне не нужно устанавливать собственный IPrincipal для базовой проверки подлинности, должен ли я?

4b9b3361

Ответ 1

из web.config remove:

<modules>
  <!--<remove name="FormsAuthenticationModule" />-->
</modules>

или просто удалите строку в web.config

Ответ 2

EDIT: я не знал, что новые проекты MVC5, созданные по умолчанию, были удалены с удалением формы (модуль удален), убедитесь, что вы также проверяете комментарий DSR под своим исходным сообщением в конъюнктуре со всем этим.

Проверьте свой web.config и найдите раздел аутентификации, он должен выглядеть примерно так:

<authentication mode="Forms">
  <forms loginUrl="..." cookieless="UseCookies" />
</authentication>

http://msdn.microsoft.com/en-us/library/1d3t3c61%28v=vs.85%29.aspx

По умолчанию cookieless значение - "UseDeviceProfile", что означает, что файлы cookie используются, если браузер сообщает, что он поддерживает файлы cookie, иначе файлы cookie не используются, и он использует значения в querystring для поддержания аутентифицированного состояния (которое необходимо сохранить на постбэки).

Во-вторых, убедитесь, что файлы cookie включены в вашем браузере. Если устройство/браузер не поддерживает файлы cookie или они отключены, SetAuthCookie внесет изменения в URL-адрес, но вам придется перенаправить браузер после вызова SetAuthCookie, используя...

FormsAuthentication.RedirectFromLoginPage(String, Boolean)...

Этот метод перенаправляет страницу в пункт назначения после аутентификации с помощью SetAuthCookie. RedirectFromLoginPage поместит необходимые атрибуты в запрос url для поддержки сеанса входа в систему через обратную передачу. Если вы делаете свои собственные переадресации на сайте здесь и там, вам нужно будет поддерживать этот параметр запроса url, передавая его обратно, проверяя, прошел ли текущий пользователь с помощью HttpContext.Current.User.Identity.IsAuthenticated.

Чтобы отправить своих пользователей на страницу входа в систему, вы должны использовать

FormsAuthentication.RedirectToLoginPage()

Этот метод добавит параметр returnUrl в строку запроса, которая позже будет перенаправлена ​​на функцию RedirectFromLoginPage после аутентификации.

Если вы блокируете доступ к пользователям или ролям с элементами местоположения в вашем web.config к путям и ресурсам Forms Authentication автоматически обрабатывает перенаправление на страницу входа в систему, когда пользователь, не прошедший проверку подлинности, пытается получить к ним доступ.

  <location path="SomeFolderOnYourSite">
    <system.web>
      <authorization>
        <deny users="?"/>
        <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>

Ответ 3

 <location path="SomeFolderOnYourSite">
<system.web>
  <authorization>
    <deny users="?"/>
    <allow roles="Administrators"/>
  </authorization>
</system.web>

похоже на то, что он не работает для меня, когда я использую тот же код с небольшим изменением его работы **<location path="~/SomeFolderOnYourSite"> <system.web> <authorization> <deny users="?"/> <allow roles="Administrators"/> </authorization> </system.web> </location>**