【问题标题】:Asp.net core 5 Identity SignOutAsync does not workAsp.net core 5 Identity SignOutAsync 不起作用
【发布时间】:2022-07-08 12:45:55
【问题描述】:

我在 razor 网站中使用 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();
    }
}

对应Microsofts documentation

我尝试了一些使用 context.SignOutAsync 描述的解决方案 here 但 httpcontext 不包含 SignOutAsync 方法。 (也许这是因为它使用的是旧版本)

有没有办法关闭服务器端会话?

【问题讨论】:

  • “服务器端会话仍处于打开状态”是什么意思?
  • 不知道是不是叫session,但无论如何用户注销后请求中发送的cookie仍然有效。我希望在重新发送此 cookie 时,身份验证失败。

标签: c# asp.net-core asp.net-identity razor-pages


【解决方案1】:

正在寻找其他内容,但您似乎正在尝试在页面加载时将用户注销,这可能导致它无法删除会话。您应该从加载的页面使用 onPost。如果您使用 _LoginPartial,您可以从那里处理注销。我已经对其进行了测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多