【问题标题】:Access context.User in OnInitializedAsync() in a Blazor page [duplicate]在 Blazor 页面的 OnInitializedAsync() 中访问 c​​ontext.User [重复]
【发布时间】:2021-10-27 03:01:15
【问题描述】:

Blazor 的组件 AuthorizeView 可以显示用户身份名称。

<AuthorizeView>
    <Authorized>
        @context.User.Identity.Name
    </Authorized>
</AuthorizeView>

如何在 Blazor 页面的 OnInitializedAsync() 方法中访问 User 变量?

IHttpContextAccessor 不是一个选项,因为微软坚持,you must not use IHttpContextAccessor within Blazor apps

【问题讨论】:

  • @snr,不知道你为什么投票结束这个问题。答案是错误的......并且提问者明确指出“IHttpContextAccessor 不是一个选项”。顺便说一句,在同一个线程中是我的答案,已删除,这是正确的答案。我会取消删除它。这个答案实际上指出了我的问题和答案(stackoverflow.com/a/59538319/6152891)。它是原创的,后来被 Blazor 团队采用来展示如何访问 HttpContext。我在您提供的链接中的答案被个人否决了,因此没有人应该看到正确的答案
  • @Browen,你可以简单地将AuthenticationStateProvider注入到你的组件中,然后在生命周期中的OnInitializedAsync()方法调用它的GetAuthenticationStateAsync()方法来获取User对象
  • @enet 你的说法就是我通过上面的链接指出的。
  • 好的,是的,你是对的。这是正确的答案。我没有阅读它,因为它不是公认的答案...

标签: c# blazor blazor-server-side


【解决方案1】:

试试这个:

var state = await this.GetAuthenticationStateAsync();
ClaimsPrincipal authenticationStateProviderUser = state.User;

获取具体信息用途:

internal static string GetEmail(this ClaimsPrincipal claimsPrincipal)
            => claimsPrincipal.FindFirstValue(ClaimTypes.Email);

要使用FindFirstValue,您需要添加对Microsoft.Extensions.Identity.Core 包的引用

【讨论】:

    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多