c# - Asp.net core Identity登录成功重定向回登录页面

我遇到一个问题,asp.net 身份框架在用户成功登录后将用户重定向回登录页面。

这是使用标准的 Asp.net Core Identity。它是版本 2.1.1。生成 Razor 页面的脚手架。不确定这是否重要。

我知道用户已成功登录,因为我收到了日志消息

...Areas.Identity.Pages.Account.LoginModel: Information: User logged in.

但随后它直接重定向回登录页面。

如果我使用 fiddler,我可以看到请求中有一个 cookie,所以从这个角度来看一切看起来都不错。

.AspNetCore.Identity.Application=CfDJ8KJxkuir9ZJIjFLCU2bzm9n6X...

所以我猜是处理身份验证但不接受 cookie 的中间件?

如果我能看到身份验证的实际中间件在做什么,我可能会有一个想法,但我找不到它。

感谢任何帮助

最佳答案

为了让 ASP.NET Core 管道识别用户已登录,需要在 Configure 方法中调用 UseAuthentication >Startup 类,如下所示:

app.UseAuthentication();
app.UseMvc(); // Order here is important (explained below).

使用 Cookies 身份验证方案,使用 UseAuthentication 松散地执行以下操作:

  • 从请求中读取 .AspNetCore.Identity.Application cookie 的内容,它表示发出请求的用户的身份。
  • 使用代表所述用户的 ClaimsPrincipal 填充 HttpContextUser 属性。

这是对所发生情况的简化解释,但它强调了身份验证中间件执行的重要工作。如果没有身份验证中间件,.AspNetCore.Identity.Application 将不会用于对用户进行身份验证,因此用户将无法通过身份验证。在您的情况下,尽管用户已登录(即正在设置 cookie),但管道中间件(例如 MVC)看不到该用户(即未读取 cookie),因此看到未经身份验证的请求并再次重定向登录。

鉴于身份验证中间件读取 cookie 并随后填充 ClaimsPrincipal,应该清楚 UseAuthentication 调用也必须之前 UseMvc 调用以使其以正确的顺序发生。否则,MVC 中间件在身份验证中间件之前运行,并且不会与填充的 ClaimsPrincipal 一起工作。

Why is it failing to login if you don't add the middleware that handles the login?!?

中间件不处理登录 - 它处理身份验证过程。用户登录,.AspNetCore.Identity.Application cookie 的存在证实了这一点。这里失败的是读取所述 cookie。

https://stackoverflow.com/questions/56842367/

相关文章:

javascript - 让 WebStorm 识别 jest.setupFilesAfterEnv

python - 如何模拟类方法的 cls 参数?

ruby - Jekyll:尽管安装了最新版本,但命令未发现问题

sql - 如何在 AWS Athena 中编写多个 SQL 语句,如 CREATE 表(使用 CL

android-studio - 安卓工作室 : Cannot get DialogFragment

php - woocommerce 自定义订单状态和 REST API

ios - 如何加密/解密安全 QR - 在 Swift 中编码为可读格式

reactjs - 我是否需要在功能性 React 组件中对功能 Prop 使用 useCallba

vue.js - 动态路由器链接将 *slash* 更改为 %2F

javascript - 如何将组添加到 buefy b-taginput?