Asp.net core 5 Identity SignOutAsync不起作用



我正在剃刀网站中使用Asp.Net核心身份框架(v5.0(。以下部分在startup.cs 中

services.AddIdentity<IdentityUser, IdentityRole>(options =>
{ 
options.Password.RequiredLength = 8;
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireUppercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Lockout.AllowedForNewUsers = true;
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.DefaultLockoutTimeSpan = new TimeSpan(0, 0, 5, 0);
options.SignIn.RequireConfirmedEmail = false;
})

一切都很好,但当我注销用户时,客户端cookie被删除,但服务器端会话仍然打开。

因此,当我捕获到一个需要身份验证的页面的http请求时,注销用户,然后回放捕获的请求,页面加载而不是登录请求。

由于安全要求,这是不可用的。

我简化了这个的注销代码

@page
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager

@functions
{
public async Task<IActionResult> OnGet()
{
if(SignInManager.IsSignedIn(User))
{
await SignInManager.SignOutAsync();
}
return RedirectToPage();
}
}

它对应于微软的文档

我使用上下文尝试了一些解决方案。此处描述了SignOutAsync,但httpcontext不包含SignOutAsync.方法。(也许这是因为使用了旧版本(

是否有关闭服务器端会话的方法?

正在寻找其他东西,但当页面加载时,您似乎正在尝试将用户注销,这可能会导致它无法删除会话。您应该从加载的页面使用onPost。如果使用登录部分(_L(,则可以从那里处理注销。我已经测试过了。

最新更新