Существует наследие, с которым у меня возникают некоторые проблемы.
Допустим, в том же браузере у меня есть пользователь, который уже вошел в систему, и другой пользователь хотел бы подтвердить свой адрес электронной почты. для создания его или ее пароля и, следовательно, активации его или ее учетной записи пользователя.
Оказывается, что пользователь, уже вошедший в систему, не вышел из системы, когда другой пользователь подтверждает свою электронную почту, хотя я звоню двум методы ниже:
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>
}
}
}
Как я могу убедиться, что уже вошедший в систему пользователь правильно вышел из системы, так что при просмотре для создания пароля для пользователя, пытающегося подтвердить свой адрес электронной почты, другого пользователя не остается.