vue系统获取授权平台授权码实现单点登录、注销功能

公司平台需要对接别的平台 实现单点登录 注销。简而言之,不需要在自己公司系统登录 统一在别的平台登录后获取到登录凭证(授权码) 在本公司系统实现免密登录的功能。

流程:

跳转授权页面和保存授权码的代码:

javascript 复制代码
 hrefLogin() {
      // 获取URL中的code参数
      const urlParams = new URLSearchParams(window.location.search);
      const code = urlParams.get('code');
      const cookieCode = getToken();
      console.log(cookieCode, '缓存code')
      // cookie中存在code值,发送给后台验证
      if (cookieCode) {
        this.sendCodeToBackend(1, cookieCode);
      } else {
        if (code) {

          //cookie没值 URL中存在code,将其存储到cookie中 
          //   Cookies.set('code', code, { expires: 718 });
          //   setToken(code)
          this.sendCodeToBackend(2, code);
        } else {
          // URL中不存在code参数,cookie也不存在 跳转到认证URL
          this.redirectToAuth();
        }
      }
    },
    sendCodeToBackend(type, code) {
      // 在这里可以调用API或执行其他逻辑,将code发送给后台
      getAuth(code).then((val) => {
        if (val.code === 200) {
          if (val.data) {
            // 保存本地信息 跳转到首页
            sessionStorage.setItem('realName', val.data.realName)
            sessionStorage.setItem('userId', val.data.userId)
            sessionStorage.setItem('token', code)
            setUserId(val.data.userId)
            if (type == 2) {
              setToken(code)
            }
            // const cookieCode = getToken();
            // console.log(cookieCode, 'code验证成功的')
            this.$router.push({
              path: '/home'
            })
          } else {
            //请求返回错误信息 把cookie里code清除 
            this.redirectToAuth();
            removeToken()
          }
        } else {
          this.$Message.error("获取认证码失败");
          return;
        }
      });
    },
    redirectToAuth() {
      // 跳转到认证URL
      const redirectUrl = '';//认证中心的网址地址
      const applicationId = '';//后台给的applicationId信息
      const state = '1'; 
      const redirectUrlParam = '';//重定向自己系统的地址 在这个地址去接收授权码 我是定位到登录页可以定位到首页 都是在创建时去操作
      const url = `${redirectUrl}?applicationId=${applicationId}&responseType=code&state=${state}&redirectUrl=${encodeURIComponent(redirectUrlParam)}`;
      window.location.href = url;
    },

退出登录代码:

javascript 复制代码
  signOutCli() {
      this.$confirm('此操作将退出系统, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        //   调用注销的接口
        logout().then((val) => {
          if (val.code === 200) {
            //   去掉本地缓存的登录信息 清除cookie
            sessionStorage.clear()
            localStorage.clear()
            removeToken()
            this.$router.push({ path: "/" });
            this.$message({
              type: 'success',
              message: '退出成功!'
            });
          }
        })

      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消退出'
        });
      });

    }

总结:系统需要在别的平台统一登录 我们系统的登录页面就不需要了 在我们的登录页面去获取授权码 传给后台 验证通过之后 即可进入首页 首页退出注销登录信息

重点:1、跳转授权页面获取授权码的方向第一步弄错 文档没认真看!!没看文档 就根据后台说的去请求接口 一直处理跨域错误

2、code授权码生成 保存 时限 销毁,code首先是用cookie保存的 但是最先生成是路由传值过来的code 即使是这样也不能先判断路由code 应该先判断cookie里面是否存有code 没有在去获取路由的值 路由没值去跳转授权界面生成新code值,在有值的情况下传给后台去验证用户信息 通过则跳转首页

3、token值全用code值替换掉 那就是只需要改值 不需要改原来的业务逻辑

相关推荐
FungLeo9 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn11 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_11 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt11 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide12 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel12 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘13 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马13 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut13 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia12314 小时前
实现完整 Tool Dispatcher
开发语言·前端