使用 BLAZOR SERVER 获取当前登录用户的 ID

Luk*_*ent 8 identity blazor

我有一个 Blazor 服务器应用程序,需要获取当前用户 ID。获取电子邮件和用户名很容易,但获取 ID 却不是。在 .net core 2.2 中这非常简单。我不明白他们为什么不公开 ID。我正在使用.net core 5.0。有没有好心人可以帮助解决这个问题?

Ben*_*973 13

有几种方法可以做到这一点。这是我经过一番修改后发现的。我喜欢它,因为它只需要一次注入,而且 ASP 还可以处理角色。令人惊讶的是,“nameidentifier”是标准 EF Core 登录中的 UserId(这是一个 GUID):

@inject AuthenticationStateProvider _authenticationStateProvider
        
@code {
    async Task<string> getUserId(){
        var user = (await _authenticationStateProvider.GetAuthenticationStateAsync()).User;
        var UserId = user.FindFirst(u => u.Type.Contains("nameidentifier"))?.Value;
        return UserId;
    }
}
Run Code Online (Sandbox Code Playgroud)

我建议在 Visual Studio 中检索用户后设置一个断点,然后将鼠标悬停在其上。这将使您能够检查它并看到所有的细节 - 您会惊讶地发现您可以在该User对象中挖掘出如此多的简洁信息!