vue项目,配合signalR实现前置登出功能方案咨询

发布于 2022-09-12 13:07:32 字数 1170 浏览 21 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九厘米的零° 2022-09-19 13:07:32

最后采用方式:

当用户调用登录接口时,清空掉当前token(用户名)所存储的所有 链接signalR id,并为这些id对应的用户推送消息;然后接口返回,重新初始化 signalR(重新建立token(用户名) 链接id集合)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文