ASP.NET Core Identity本地调试登录成功跳转后未登录问题
问题根因
问题出在ASP.NET Core 请求管道的中间件配置错误,缺失认证中间件且顺序不符合要求,和登录表单、Cookie生成、脚手架生成的页面逻辑没有关系。
ASP.NET Core 3.1 采用端点路由后,身份相关中间件的执行顺序有严格强制要求:路由匹配完成后,必须先执行认证中间件,解析请求携带的身份Cookie、填充HttpContext.User的身份信息,之后才能执行授权中间件做权限校验,最后才会进入具体的页面/接口逻辑。
查看你贴的Startup.cs配置,UseRouting()之后直接调用了UseAuthorization(),完全漏掉了app.UseAuthentication()这一步,才会出现你观测到的现象:
- 调用
PasswordSignInAsync时登录逻辑正常执行,日志记录登录成功,身份Cookie也被正确写入响应 - 但重定向到首页发起的新请求,没有任何中间件负责读取、解析携带的身份Cookie,
User对象始终保持未认证的空状态 - 最终
_LoginPartial里的SignInManager.IsSignedIn(User)永远返回false,表现为登录后仍显示未登录
修复方法
调整Configure方法中的中间件顺序,在UseRouting()和UseAuthorization()之间插入app.UseAuthentication()调用,修正后的管道配置代码如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseSession(); app.UseRouting(); // 新增以下代码,注意位置不能放错:必须在UseRouting之后,UseAuthorization之前 app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); }); }
验证方式
修改完成后重启应用,重新走登录流程即可恢复正常:重定向到首页时,认证中间件会自动解析请求携带的Identity身份Cookie,填充用户身份信息,登录状态判断、用户名称展示都会正常生效。
内容的提问来源于stack exchange,提问作者Thommelutten
相关产品推荐
相关产品推荐

