You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6.0获取当前登录用户信息返回null问题求助

问题根因

获取已登录用户始终返回null是配置错误导致的,核心问题按影响优先级排序:

  • 中间件执行顺序完全错误:ASP.NET Core 中间件严格按代码书写顺序执行,你当前将认证、授权中间件放在了路由、CORS中间件之前,请求还未完成路由匹配、CORS校验就进入认证流程,根本无法正确解析请求携带的身份凭证。
  • 前后端分离场景下的凭证携带问题:如果前端是独立部署的SPA项目,后端开启AllowCredentials只是完成了CORS侧的配置,若前端请求未主动配置携带Cookie,认证凭证不会被发送到后端,自然无法识别登录状态。
修复步骤

1. 调整Program.cs的中间件顺序

中间件顺序不能随意调换,将原有中间件配置替换为以下正确顺序即可:

var app = builder.Build();

// 静态文件中间件优先
app.UseStaticFiles();

// 先初始化路由
app.UseRouting();

// CORS配置必须放在认证、授权之前
app.UseCors(x => x
    .AllowAnyMethod()
    .AllowAnyHeader()
    .SetIsOriginAllowed(origin => true) 
    .AllowCredentials());

// 先执行身份认证,再执行权限校验,顺序不可颠倒
app.UseAuthentication();
app.UseAuthorization();

// 最后配置端点映射
app.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action=Index}/{id?}");

app.MapFallbackToFile("index.html");

// 数据库初始化逻辑无需改动
using (var scope = app.Services.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
    dbContext.Database.EnsureCreated();
}

app.Run();

2. (可选)简化当前用户获取逻辑

ControllerBase基类本身已经携带User属性,不需要额外注入IHttpContextAccessor取当前用户,可以简化接口代码:

[HttpGet]
[Route("getCurrentUser")]
public async Task<IActionResult> GetCurrentUser()
{
    var user = await _userManager.GetUserAsync(User);
    if(user == null)
    {
        return Unauthorized();
    }
    return Ok(user);
}

保留原有注入写法也不会影响功能运行。

3. 前端请求配置校验

如果调整中间件顺序后仍无法获取用户,检查前端请求是否配置了凭证携带:

  • 使用axios时,全局配置axios.defaults.withCredentials = true
  • 使用原生fetch时,请求参数添加credentials: 'include'
验证方式

重启项目后先调用登录接口,登录成功后再请求/account/getCurrentUser接口,即可正常返回当前登录的用户实体,不会再出现null的情况。

内容的提问来源于stack exchange,提问作者Kunegundek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:36:25