如何在.NetCore中托管的Blazor 3.2 Webassembly中的ApplicationUser中实现自定义属性

时间:2020-10-23 22:01:43

标签: blazor blazor-webassembly

我试图在Blazor WebAssembly 3.2的默认模板中获取自定义属性,但是当我在blazor.server部分调试context.User.Identity.Name时,它为null。我可以看到用户是context.User.Identity.IsAUthenticated为true,但是所有其他属性似乎为null或为空。

因此要重现:

  1. 创建一个新的Blazor WebAssembly 3.2项目
  2. 执行添加迁移初始+数据库更新
  3. 启动blazor.server项目并注册用户并登录
  4. 在Weatherforecast的Get方法上设置一个断点。
  5. context.User.Identity.Name为空

任何人都可以找到有关此问题的指南或提示。谢谢

1 个答案:

答案 0 :(得分:2)

注意:该模板将电子邮件存储在数据库的电子邮件和名称字段中。

在服务器中的Startup.cs中。将这些选项添加到AddApiAuthorization

 services.AddIdentityServer()        
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options =>
    {
        options.IdentityResources["openid"].UserClaims.Add("name");
        options.ApiResources.Single().UserClaims.Add("name");                 
    });

在您的控制器中

Public async Task<IEnumerable<WeatherForecast>> Get()
{
    var userName = User.Identity.Name;
    var applicationUser = await userManager.FindByNameAsync(userName);
...