Почему для User.Identity.IsAuthenticated задано значение true, даже если я вышел из системы - PullRequest
0 голосов
/ 26 февраля 2020

Существует наследие, с которым у меня возникают некоторые проблемы.

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

Оказывается, что пользователь, уже вошедший в систему, не вышел из системы, когда другой пользователь подтверждает свою электронную почту, хотя я звоню двум методы ниже:

  • await SignInManager.SignOutAsync();
  • await UserManager.UpdateSecurityStampAsync(alreadyLoggedInUser);

Код действия контроллера:

// GET: /Account/ConfirmEmail
[AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(string code, string userId)
{
    if (code == null || userId == null)
    {
        return View("TokenError");
    }

    await SignInManager.SignOutAsync();

    var user = await UserManager.FindByIdAsync(userId);
    if (user == null)
    {
        Logger.LogInformation("User not found");
        return View("TokenError");
    }

    var alreadyLoggedInUser= await UserManager.GetUserAsync(User);
    await UserManager.UpdateSecurityStampAsync(alreadyLoggedInUser);

    HttpContext.Response.Cookies.Delete("Set-Cookie");

    if (await CheckAccountActivationTokenAsync(user, code))
    {
        return View("CreatePasswordView", new SetPasswordViewModel());
    }

    Logger.LogInformation("Invalid token");
    return View("TokenError");
}

Возвращенное представление основан на макете и в одном из частичных представлений есть проверка, чтобы узнать, аутентифицирован ли пользователь или нет, что оказывается именно так.

@using MySecretProject.Core.App_LocalResources
@{
    if (User.Identity.IsAuthenticated)
    {
        using (Html.BeginForm("LogOut", "Account", new { Area = "" }, FormMethod.Post, null, new { id = "logoutForm" }))
        {
            @Html.AntiForgeryToken()
            <a href="javascript:document.getElementById('logoutForm').submit()">@Resource.Logout</a>
        }
    }
}

Как я могу убедиться, что уже вошедший в систему пользователь правильно вышел из системы, так что при просмотре для создания пароля для пользователя, пытающегося подтвердить свой адрес электронной почты, другого пользователя не остается.

1 Ответ

1 голос
/ 26 февраля 2020

попробуйте

HttpContext.SignOutAsync();

в действии выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...