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到时候,没办法传递参数,后台不能知道当前初始化(登录)方式,请问大家有什么好建议呢?
谢谢!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…