我有一个问题,即asp.net标识框架在用户成功登录后将用户重定向回登录页面。
这是使用标准的Asp.net核心身份。它是2.1.1版本。生成剃刀页面的脚手架。不确定这是否重要。
我知道用户已成功登录,因为我收到了日志消息
... Areas.Identity.Pages.Account.LoginModel:信息:用户登录。
但随后它会直接重定向到登录页面。
如果我使用fiddler,我可以看到请求中有一个cookie,所以从这个角度看它都很好看。
.AspNetCore.Identity.Application=CfDJ8KJxkuir9ZJIjFLCU2bzm9n6X...
所以我猜中间件正在处理身份验证但不接受cookie?
如果我能看到auth的实际中间件正在做什么我可能有一个想法,但我找不到它。
任何帮助赞赏
为了让ASP.NET Core管道识别用户已登录,需要在UseAuthentication
类的Configure
方法中调用Startup
,如下所示:
app.UseAuthentication();
app.UseMvc(); // Order here is important (explained below).
使用Cookies身份验证方案,UseAuthentication
的使用松散地执行以下操作:
.AspNetCore.Identity.Application
cookie的内容,该cookie表示发出请求的用户的身份。User
填充HttpContext
的ClaimsPrincipal
属性。这是对所发生情况的简化说明,但它强调了身份验证中间件执行的重要工作。如果没有身份验证中间件,.AspNetCore.Identity.Application
将不会用于对用户进行身份验证,因此用户将不会进行身份验证。在您的情况下,虽然用户已登录(即正在设置cookie),但管道中间件(例如MVC)没有看到此用户(即cookie未被读取),因此看到未经身份验证的请求并再次重定向登录。
鉴于认证中间件读取cookie并随后填充ClaimsPrincipal
,应该清楚UseAuthentication
调用也必须在UseMvc
调用之前,以便以正确的顺序发生。否则,MVC中间件在Authentication中间件之前运行,并且不会使用填充的ClaimsPrincipal
。
如果您不添加处理登录的中间件,为什么无法登录?!?
中间件不处理登录 - 它处理身份验证过程。用户已登录,这是由.AspNetCore.Identity.Application
cookie的存在所证实的。这里失败的是读取所述cookie。