You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server中如何在非组件类(Hub类)内获取当前用户

SignalR Hub中OnConnectedAsync获取当前用户的正确方式

你的代码存在两个关键问题:

  1. OnConnectedAsync的返回值错误,应该返回Task而非Task<Task>
  2. 无需注入AuthenticationStateProvider,SignalR的Hub自带Context.User属性可直接获取当前用户

正确实现代码

public class TestHub : Hub
{
    public override async Task OnConnectedAsync()
    {
        // 直接通过Hub上下文获取当前认证用户
        var user = Context.User;

        // 示例:获取用户标识和用户名
        var userId = user.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
        var userName = user.Identity?.Name;

        // 不要忘记调用基类方法
        await base.OnConnectedAsync();
    }
}

额外注意事项

  • 确保你的SignalR服务已配置认证:在Program.cs/Startup.cs中启用AddAuthentication和AddAuthorization,并且Hub类或方法上标记了[Authorize]特性(若需要强制认证)
  • 客户端连接时必须携带有效认证凭证(如JWT Token),否则Context.User会是匿名用户,无法获取用户信息

内容的提问来源于stack exchange,提问作者Still

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:05:31