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
相关产品推荐
相关产品推荐

