前端单点登录

 单点登录系统的前端方案大概分为两种,一种是使用cookies实现的,一种是使用iframe的postMessage实现的,这两种的区别在于cookies的方案适用于要做登录的几个系统的主域名是一样的。postMessage方案可以是不一样的。

我要做的几个系统之间的的主域名是相同的,所以我使用了cookies的方案实现。

cookies可以设置二级域名共享cookies,比如a.test.com 和b.test.com如果想要共享cookies的话可以设置

Cookies.set("userInfo", encodeUserInfo, {

        path: "",

        domain: ‘test.com’,

      });

1.首先就是再单点登录后进行cookies设置,

      let cookiesDomine = "test.com";/*  */

     //设置cookies

      Cookies.set("userInfo", encodeUserInfo, {

        path: "",

        domain: cookiesDomine,

      });

      //从url上获取登陆后该跳回的地址

      let query = window.location?.href?.split("?");

      let params = query.length > 0 ? query[1] : "";

      let paramsArr = params?.split("=") || "";

      let paramsUrl = paramsArr.length > 0 ? paramsArr[1] : "";

      console.log(paramsUrl, "paramsUrl");

      if (paramsUrl) {

        window.location.href = decodeURIComponent(paramsUrl);

      }

2.再其他跳转过来的系统的app.vue的mounted方法里

通过cookies获取存储的token信息

import Cookies from "js-cookie";

let cookiesDomin = import.meta.env.VITE_COOKIES_DOMIN;

onMounted(() => {

  let userInfo = Cookies.get("userInfo");

  if (userInfo) {

    // debugger;

    localStorage.setItem("userInfo", userInfo);

  } else {

    localStorage.setItem("userInfo", "");

  }

});

3.再需要跳转单点登录的系统里的axios的请求拦截中加入跳转单点登录的逻辑

request.interceptors.response.use(

  (response) => {

    console.log("333", response.data);

    if (response.data.returnCode !== "000000") {

      message.error(response.data.returnMessage);

      if (response.data.returnCode === "000009") {

       

        toLogin()

      }

    }

    return response.data;

  },

  (error) => {

    console.log("status不是200的时候", error);

    return Promise.reject(error);

  }

);

toLogin是定义在util里面的方法

export const toLogin = (url?: string) => {

  //登录跳转

  let localtion = url ? url : window.location.href;

  console.log(VITE_SINGLE_LOGIN_URL + encodeURIComponent(localtion));

  debugger;

  window.location.href = VITE_SINGLE_LOGIN_URL + encodeURIComponent(localtion);

};

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值