繁体   English   中英

如果用户已登录,我如何访问当前的 IdentityUser 属性?

[英]How do I access current IdentityUser properties if a User is logged in?

我使用带有单独身份验证的 blazorwasm 模板的默认值创建了这个应用程序。 下面是我的一些 csproj 文件。

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>


<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="3.2.0-preview3.20168.3" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1" />
  <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
</ItemGroup>


<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>

当用户登录时,我正在尝试从派生自 IdentityUser 的 ApplicationUser 检索属性。 我目前正在查看 3 个类(UserManager、SignInManager 和 ApplicationUser)。 我还用我想要检索的属性扩展了 ApplicationUser。 此属性用于仅在数据库中查询具有此属性值的记录。 换句话说,来自数据库表 AspNetUsers 的值。

我创建了一个服务 class 来在我的应用程序中处理这个问题。 从我的 controller 我设置ApplicationUser user ,然后调用我创建的服务user = await this._userServices.GetUserInformation(User) (大写的用户是登录用户)

在用户服务 class 中,这就是我所拥有的:

public class UserServices : IUserServices
{
    private UserManager<ApplicationUser> _userManager;

    public UserServices(
        UserManager<ApplicationUser> userManager)
    {
        this._userManager = userManager;
    }

    public async Task<ApplicationUser> GetUserInformation(ClaimsPrincipal userClaim)
    {
        var userId = userClaim?.FindFirst("UserId")?.Value; // returns null if no user logged in
        var user = await _userManager.FindByIdAsync(userId);
        return user;
    }
}

调用此命令后,您可以对您的用户进行 null 检查。

您从此处获得的用户信息(即 AspNetUsers 表中的内容)将包含您需要的字段。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM