小编Jon*_*han的帖子

如何在signalR hub web api .net core中从用户那里获得声明

我想为我的 Web 项目添加聊天实时功能。我正在使用 asp.net SignalR 2.4 来实现该功能。但是我很难从集线器类中的不记名令牌中获取 UserId。

我使用 angular 7 从客户端提供令牌,我可以通过集线器类中的查询字符串获取该令牌。

我可以使用以下方法轻松地在我的控制器之一中获取 UserId:

var userId = User.Claims.First(c => c.Type == "UserID").Value;
Run Code Online (Sandbox Code Playgroud)

但是在集线器类中,用户始终为空 来自集线器类的代码:

public override Task OnConnectedAsync()
{
    var identity = (ClaimsIdentity)Context.User.Identity;
    var connectionId = Context.ConnectionId;
    var query = Context.GetHttpContext().Request.Query;
    var token = query["access_token"].ToString();
    return base.OnConnectedAsync();
}
Run Code Online (Sandbox Code Playgroud)

来自客户端的代码使用 angular 7:

ngOnInit(): void {
    this.hubConnection = new signalR.HubConnectionBuilder()
      .withUrl('http://localhost:50792/chat',{
        accessTokenFactory: () => {
          return this.token;
        },
      } as signalR.IHttpConnectionOptions)
      .build();
    // this.hubConnection.Headers.Add("Authorization", "Bearer " +
this.token);
    this.hubConnection
      .start()
      .then(() => …
Run Code Online (Sandbox Code Playgroud)

token signalr asp.net-core angular

5
推荐指数
1
解决办法
386
查看次数

标签 统计

angular ×1

asp.net-core ×1

signalr ×1

token ×1