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

Request.IsAuthenticated всегда false

Можете ли вы сказать мне, почему FormsAuthentication.SetAuthCookie(user.Name, false); не вызывает Request.IsAuthenticated, чтобы быть правдой?

Вот мой код:

[HttpPost]
    public ActionResult LogIn(karcioszki.Models.UserLoginModel  user)
    {
        if (ModelState.IsValid)
        {
            if (IsValid(user.Name, user.Password))
            {
                FormsAuthentication.SetAuthCookie(user.Name, false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", "Login or password is incorrect");
            }
        }

        return View(user);
    }

и если инструкция:

@if (Request.IsAuthenticated)
{
    <a href="@Href("~/")" class="active">Home</a>
    <a href="@Href("~/Cards")">Cards</a>
    @Html.ActionLink("Log out", "Logout", "User")
    @Html.Encode(User.Identity.Name)
}

Также, пожалуйста, скажите мне, как заставить его работать?

EDIT: Я добавил аутентификацию в web.config(оба), но он все еще не работает.

<system.web>
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5" />
<authentication mode="Windows"/>
<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
    <add namespace="System.Web.Optimization" /> 
  </namespaces>
</pages>

Должен ли я использовать Windows или другой режим?

4b9b3361

Ответ 1

У меня была такая же проблема в проекте MVC5. Решением было добавить следующие строки в раздел модулей в system.webServer

<remove name="FormsAuthentication" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />

Ответ 2

вы должны установить FormsAuthentication.SetAuthCookie(acct.UserName, true); после проверки пользователя и, пожалуйста, проверьте, что вы должны установить authentication mode="Forms" в web.config.

Ответ 3

Добавьте следующий код в свой Web.config

<authentication mode="Forms">
  <forms loginUrl="~/_Login/Login" timeout="30" />
</authentication>

и

  <modules>
  <remove name="FormsAuthentication" />
  <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</modules>

Ответ 4

Вы проверяете подлинность пользователя. Поэтому используйте:

if (User.Identity.IsAuthenticated) 

Это устранит проблему и, как уже упоминалось, установит элемент аутентификации в вашем web.config для форм, а не для Windows.

Ответ 5

Я искал около 2 часов, чтобы решить проблему. И если у вас уже есть настройки, как вам говорят в нескольких руководствах (как MSDN и т.д.), И у вас все еще есть проблема, единственное, что ее решит, это добавить:

<system.webServer>
  <modules>
     <remove name="FormsAuthentication" />
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
  </modules>
<system.webServer>

внутри webconfig.

Ответ 6

У меня была точно такая же проблема в моем MVC4 Web Application. Еще одна возможная причина для этой проблемы ниже метода в IdentityModels.cs файле

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
                            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
                            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
                            // Add custom user claims here
                   return userIdentity;
    }

Убедитесь, что DefaultAuthenticationTypes - ApplicationCookie

Приветствия,