asp.net core如何在SignalR中获取用户信息

asp.net core如何在SignalR中获取用户信息(AbpSession)

业务需要在signalR中需要根据User.Id去做数据的过滤,net core在TokenAuthController中集成了登录的功能。但是登录之后,连接signalR,在signalR中直接使用AbpSession.UserId获取到的是null。一直在百度谷歌中查找,结果应该和大家一样,解决方案都是在客户端连接时传递UserId参数,在服务端连接成功的事件OnConnected中将connectionId和userId保存在字典中,用的时候通过connectionId获取userId。

看了官方的文档之后,发现有SignInManager这么一个类,依我的智商,看不懂微软寥寥七八个字介绍的SignInManager是个什么玩意儿。官方就提供了api和参数,跟没写一样。他是ASP.NET用于身份识别的两种cookie。具体是什么大家自行百度。

signalR获取UserId


登录成功之后、在Authenticate返回前使用SignInManager的SignInAsync方法,便可以在SignalR中获取到AbpSession。但是使用此方法后,在层级架构中获取的User.Claims权限会优先使用SignInAsync生成的。这就导致退出登录的时候无法获取有关token的claims的信息,导致登录异常。解决办法就是在前端退出前,先调用后台执行SigInManager.SignOutAsync,再调用LogOut就可以正常退出了。

以上有理解不对的地方,欢迎大佬留言批评

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值