Я только что перешел с asp. net ядро 2.2 на 3.1, и некоторые вещи просто не работают, как раньше.
Одна проблема - аутентификация пользователя, то, что раньше работало, больше не работает .
Вот моя проверка подлинности, и она работает как для asp. net core 2.2 и 3.1.
@{
if (User.Identity.IsAuthenticated)
{
Layout = "_LayoutLoggedIn";
}
else
{
Layout = "_LayoutLoggedOut";
}
}
Так что строка: User.Identity.IsAuthenticated
работает для вышеупомянутого, всегда.
Но мой код аутентификации не работает при использовании 3.1, или я понял это только сейчас.
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> SignInUser(UserModel user, bool rememberMe)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.Email),
new Claim(ClaimTypes.Email, user.Email),
};
// add roles
var roleList = await userService.UserRoles(user.Email);
foreach (var role in roleList)
{
var claim = new Claim(ClaimTypes.Role, role.Role);
claims.Add(claim);
}
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
Task task = HttpContext.SignInAsync(principal, new AuthenticationProperties
{
IsPersistent = rememberMe
});
await task;
if (task.IsCompletedSuccessfully)
{
if (!User.Identity.IsAuthenticated)
{
// identity.IsAuthenticated works?
System.Console.WriteLine("BUG !!!!"); <!---
}
return RedirectToAction("Index", "Home");
}
else
{
System.Console.WriteLine("Failed to Sign in");
}
return RedirectToAction("Index", "Home");
}
}
В приведенном выше коде User.Identity.IsAuthenticated
оценивает слишком ложно, в то время как identity.IsAuthenticated
оценивает слишком true.
Я не проверял это раньше asp. net 2.2, но подозреваю, что 3.1 сломал это.
И почему User.Identity.IsAuthenticated
будет работать, когда я загружаю свои макеты на основе на статус входа, а не во время аутентификации пользователя?