angular - 如何在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;
但是在集线器类中,用户始终为空 我的集线器类中的代码:
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();
}
使用 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(() => console.log('Connection started'))
}
解决方案
推荐阅读
- php - Symfony 5 错误“传递给日志系统的类没有处理程序”独白?
- ios - iOS 中的模块化开发
- java - 什么导致同步锁卡住?
- git - 如何在 Github Desktop 中“撤消”撤消?
- python - http响应pythyon中的随机3-4长字符串
- python - 如何在 Pandas Dataframe 中过滤小时数
- javascript - 有没有办法 DM 使用 discord.js 的消息中提到的某人?
- node.js - 无法将图像附加到 pug html 和 nodemailer
- typescript - 类型“字符串”上不存在属性“forEach”| 细绳[]'
- python - 在这种情况下,python 的 slice 函数会占用大量内存吗?