加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在活动的SignalR连接期间更改用户身份 – 如何重

发布时间:2020-12-15 20:09:23 所属栏目:asp.Net 来源:网络整理
导读:我遇到了SignalR和用户在ASP.NET MVC 4应用程序中更改身份的问题.我正在使用Forms身份验证与自定义成员资格提供程序. 我有SignalR的视图也有一个登录(和注销)按钮,并且登录和注销的用户必须能够看到这个视图(并且都连接到与该关联的SignalR组相关联)视图).但
我遇到了SignalR和用户在ASP.NET MVC 4应用程序中更改身份的问题.我正在使用Forms身份验证与自定义成员资格提供程序.

我有SignalR的视图也有一个登录(和注销)按钮,并且登录和注销的用户必须能够看到这个视图(并且都连接到与该关联的SignalR组相关联)视图).但是,当用户登录时,我会遇到麻烦.当用户身份发生变化时,建议的“重新连接”SignalR连接的做法是什么?该视图是由其他操作显示的其他几个视图之一.这是唯一一个包含SignalR的JavaScript.

事实上,我甚至对所有用户的身份感兴趣,所以把用户关注点转移到某种程度上就可以了(但是我找不到一个方法).用户更改可以触发页面重新加载,因为登录/注销发生在除了维护连接的窗口之外的窗口中,因此后者没有用户的焦点.

这个问题,换句话说:当用户身份从登录用户更改为已注销的用户时,如何保持基本的SignalR连接,反之亦然?

我试过的事情

>在页面上处理登录/注销事件,如下所示:
$(“a [href =’/ Account / Logout’]”).click(function(){
$.connection.hub.stop();
});

这有效,但这将需要SignalR在用户所在的每个页面上
能够登录或登出,而不仅仅是实际使用SignalR的用户.
>在与ASP.NET会话ID相关联的集线器上添加一个额外的组,这在登录和注销之间保持一致.登录或注销后,我通过发送具有该会话ID的组来通知客户端以重新连接触发器.这只是事实证明是太晚了,在请求结束时,身份已经被改变了,所以异常被解雇了.

有关我的设置的更多细节

对于这种特殊用例,用户会看到包含SignalR的页面.我按照惯例加入中心:

var hub = $.connection.theNameOfTheHub;
$.connection.hub.start().done(function () {
  hub.server.joinList(id);
});

为了这个例子的目的,我改了几个名字.基本上,我想监控页面上显示的项目列表中的更改.我使用列表的id作为标识符加入一个组.

异常消息是“System.InvalidOperationException:无法识别的用户身份”.在活动的SignalR连接期间,用户身份不能更改.它来自Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId.我查找了源代码,并将实际的context.Request.User.Identity.Name与存储在连接令牌中的context进行比较.这一切都是有道理的,但我正在寻找的是一种解决方法.

我正在使用Microsoft.AspNet.SignalR 1.1.2.

解决方法

这很简单,不要依赖用户识别,而是创建自己的cookie,您可以跟踪每个用户,无论该用户是否登录.就像许多广告商也有Cookie来跟踪用户,即使他们没有登录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读