美文网首页
使用serviceWorker做前端的单点登陆

使用serviceWorker做前端的单点登陆

作者: 周杰smile | 来源:发表于2020-08-06 14:05 被阅读0次

网上关于serviceWorker一般是用于做PWA的,这里介绍的不是这个,如需了解,自行百度

原理:

serviceWorker是一个独立于页面的,浏览器级别的线程

serviceWorker线程可以与页面间通过addEventListener('message',postMessage进行通信

serviceWorker线程中可以获取到所有被此线程控制的浏览器窗口 self.clients.matchAll()

代码解析

  1. 首先页面中初始时要初始化serviceWorker
navigator.serviceWorker
      .register('serviceWorker.js', {
        scope: '/',
      })
      .then(function(registration) {
        if (config && config.onRegister) {
          config.onRegister(registration)
        }
        ...
  1. 每个页面进入时,通知serviceWorker有新页面打开了,并监听serviceWorker的信息。

页面代码:

navigator.serviceWorker.controller.postMessage({
    type: 'closeOtherClient',
 })

if (event.data.oprType && event.data.oprType === 'close') {
    disconnectCBS.forEach(cb => cb())
}
  1. serviceWorker.js代码

serviceWorker收到新窗口打开信号后,去通知其他所有页面执行关闭代码(比如页面上弹框提示用户,您的账号已在别处登陆)

this.addEventListener('message', function(event) {
  const senderId = event.source ? event.source.id : 'unknow'

  if (event.data.type === 'closeOtherClient') {
    self.clients.matchAll().then(function(clients) {
      if (clients && clients.length) {
        clients.forEach(function(client) {
          if (senderId !== client.id) {
            client.postMessage({
              oprType: 'close'
            })
          }
        })
      }
    })
  }
})

相关文章

  • 使用serviceWorker做前端的单点登陆

    网上关于serviceWorker一般是用于做PWA的,这里介绍的不是这个,如需了解,自行百度 原理: servi...

  • 使用postMessage做单点登陆

    最近公司需要做一个单点登陆,但是产品那边不希望用户跳转或者打开新的页面,所以方案使用了iframe 和pos...

  • 网络安全之反序列化漏洞复现

    0x01 Apereo cas简介 Apereo CAS 单点登陆系统是Java服务器环境下使用较为广泛的单点登陆...

  • 自定义Django_rest_framework_jwt登陆错误

    在使用Django做前端后端项目时,登陆认证方法往往使用的是jwt_token,但是想自定义登陆成功和失败的返回体...

  • 单点登陆SSO(Single Sign On)

    Q:什么是单点登陆 在多系统应用群众登陆一个系统,便可在其他所有系统中得到授权而无需再次登陆,包括单点登陆和单点注...

  • Session和EL表达式实现登陆验证

    现在多系统的登陆都采用单点登陆了,emmmm......后期再更单点登陆的,这次由于只是个小demo,所以我们采用...

  • cas 单点登录

    CAS 单点登录简介cas单点登陆。就这一篇就够了!!!!!

  • 单点登陆

    单系统登陆 普通的单个系统登陆流程是什么样子的呢?用户访问系统,如果访问的是受限制的资源,比如http://loc...

  • 单点登陆

    一、前言 什么是SSO? SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需...

  • 单点登陆

    1.SSO搭建(框架KISSO) 2.CAS实现单点登录SSO执行原理探究(终于明白了)

网友评论

      本文标题:使用serviceWorker做前端的单点登陆

      本文链接:https://www.haomeiwen.com/subject/kvvzrktx.html