Пользователь все еще не аутентифицирован после добавления AuthCookie

У меня довольно обычная страница входа, только поля имени пользователя и пароля:

<h2>Sign in</h2>

@Html.ValidationSummary()

@using (Html.BeginForm("SignIn"))
{
    <p>
        @Html.LabelFor(model => model.Username)
        @Html.TextBoxFor(model => model.Username)
    </p>
    <p>
        @Html.LabelFor(model => model.Password)
        @Html.PasswordFor(model => model.Password)
    </p>
    <input type="submit" value="Submit"/>
}

У меня есть знак в действии, определенный ниже:

[HttpPost]
[ActionName("SignIn")]
public ActionResult SignInConfirmation(UserCredentialsModel model)
{
    if (ModelState.IsValid)
    {
        var userIsValid = Membership.ValidateUser(model.Username, model.Password);

        if (userIsValid)
        {
            FormsAuthentication.SetAuthCookie(model.Username, false);

            return RedirectToAction("Index", "Home");
        }
        ModelState.AddModelError(string.Empty, "Incorrect username and\\or password.");
    }

    return View();
}   

Помимо этого у меня есть часть, которая будет отображать "Пожалуйста, войдите в систему" ​​или "Добро пожаловать, пользователь" в зависимости от того, прошли ли они проверку подлинности или сейчас.

Я вижу, что файл cookie создается и возвращается как при отладке кода, так и через Fiddler.

Когда частичное попадание, тем не менее, пользователь никогда не проходит аутентификацию:

[ChildActionOnly]
public ActionResult Index()
{
    if (User.Identity.IsAuthenticated)  // =< This is always false.
    {
        var userDetailsModel = new UserDetailsModel
        {
            UserName = User.Identity.Name
        };

        return PartialView("Authenticated", userDetailsModel);
    }
    return PartialView("Unauthenticated");
}

Я также попробовал раскатать FormsAuthenticationTicket как так:

var userData = JsonConvert.SerializeObject(new { model.Username });
var issueDate = DateTime.Now;
var authenticationTicket = new FormsAuthenticationTicket(1,
    model.Username,
    issueDate,
    issueDate.AddMinutes(5),
    false,
    userData);

но результат тот же...

Почему я никогда не проходил проверку подлинности?

1 ответ

Решение

У вас есть что-то вроде <authentication mode="Forms"> в вашем web.config у вас должно быть это.

Другие вопросы по тегам