vue项目,配合signalR实现前置登出功能方案咨询
vue项目,想要实现踢人
功能——当前登录用户会踢掉之前登录的账号;
需要满足:
1、同一浏览器多标签可以同时存在(同一用户);
2、跨浏览器不支持,表示多次登录,后面登录的用户挤出前面登录的账户(多个标签都需要收到推送);
实现方式:
在 app.vue 里面初始化signalR
,如果是登录或者刷新(重开浏览器页签),则初始化signalR
,这个时候就能接收到后台推送的消息了,伪代码如下:
app.vue 文件伪代码:
watch: {
$route(to, from) {
if (from.name === "login") { //如果是点击登录按钮登录
this.signalRInit();
}
}
}
mounted() {
this.setTitle(websitEnv.websiteTitle);
if (getToken()) { //刷新或者重新开的浏览器页签
this.signalRInit();
}
}
methods: {
//signalR初始化
signalRInit() {
var _this = this;
var tokens = getToken();
let baseUrl = "/api/xxx";
_this.connection = new signalR.HubConnectionBuilder()
.withUrl(baseUrl, { accessTokenFactory: () => tokens })
.configureLogging(signalR.LogLevel.Warning) //signalR.LogLevel.Information
.build();
}
}
思路:
初始化的时候,前端告诉后台,当前登录(初始化signalR)方式是什么方式——登录
或 刷新(重开标签)
;如果是前者,表示为第二个用户登录当前账号,后台这需要推送踢人命令;如果是后者,表示是同一个用户的多个浏览器页签或者刷新操作,则不需要踢人;
目前遇到的问题是:在初始化signalR到时候,没办法传递参数,后台不能知道当前初始化(登录)方式,请问大家有什么好建议呢?
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最后采用方式:
当用户调用登录接口时,清空掉当前token(用户名)所存储的所有 链接signalR id,并为这些id对应的用户推送消息;然后接口返回,重新初始化 signalR(重新建立token(用户名) 链接id集合)