Blazor Server中如何在非组件类(Hub类)内获取当前用户
SignalR Hub中OnConnectedAsync获取当前用户的正确方式
你的代码存在两个关键问题:
OnConnectedAsync的返回值错误,应该返回Task而非Task<Task>- 无需注入
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
相关产品推荐
相关产品推荐

