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

ASP.NET登录后无法获取用户标识信息及认证状态问题咨询

ASP.NET登录后无法获取用户标识信息及认证状态问题咨询

嘿,看起来你遇到的问题大概率不是因为把User表改成Client表导致的,核心问题应该出在Claims的完整性和认证流程的遗漏上,我帮你一步步排查下:

一、无法显示用户名(欢迎语)的原因

你当前的Claims集合里只添加了NameIdentifier(用户ID)、手机号、邮箱和ChefFoodIds,但缺少了ClaimTypes.Name这个关键声明。ASP.NET里User.Identity.Name默认读取的是ClaimTypes.Name对应的Claim值,所以你需要把Client表中的用户名字段(比如client.Name或者client.UserName)添加到Claims里:

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, client.ClientId.ToString()),
    new Claim(ClaimTypes.Name, client.Name), // 这里补上用户名
    new Claim(ClaimTypes.MobilePhone, client.MobileNumber),
    new Claim(ClaimTypes.Email, client.Email),
    new Claim("ChefFoodIds", string.Join(",", login.ChefFoodIds))
};

这样前端再访问User.Identity.Name就能拿到用户名,欢迎语就能正常显示了。

二、认证状态(User.Identity.IsAuthenticated)失效的问题

看你贴的代码,只创建了ClaimsIdentity、ClaimsPrincipal和AuthenticationProperties,但没有执行关键的登录操作!你需要在这些代码之后调用SignInAsync方法,把认证信息写入Cookie:

// 补上这行代码,注意要加await(如果是异步方法的话)
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, properties);

除此之外,还要检查你的项目配置是否正确:

  • 确保在Program.cs或Startup.cs里正确配置了Cookie认证:
    // Program.cs示例
    builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            // 可以根据需求配置Cookie的过期时间、路径等
            options.LoginPath = "/Account/Login";
            options.ExpireTimeSpan = TimeSpan.FromDays(7);
        });
    
    // 注意中间件顺序:先UseAuthentication,再UseAuthorization
    app.UseAuthentication();
    app.UseAuthorization();
    
  • 确认ClaimsIdentity使用的Scheme和你配置Cookie认证时的Scheme一致(你用的CookieAuthenticationDefaults.AuthenticationScheme是默认值,没问题)。

三、关于改表名的影响

放心,把User表改成Client表本身不会影响认证流程,只要你能从Client表正确读取到用户的各项数据(ID、用户名、手机号等)并填充到Claims里,就不会有问题。

备注:内容来源于stack exchange,提问作者Maryam12 forex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:54:40