当前位置: 首页 > article >正文

Vue 第三方调用若依系统实现系统单点登录

应用场景

甲方现有平台系统拟集成我方新开发系统,实现单点登录功能,即用户登录主平台后,无需重复登录即可无缝访问新系统,提升用户体验与操作效率。

解决方案

在这里插入图片描述

实现代码

前端
Step:1 新建ssoLogin.vue页面

在这里插入图片描述

<template>
  <div></div>
</template>

<script>
export default {
  name: "SSOLogin",
  data() {
    return {
      loading: false,
      redirect: undefined,
    };
  },
  watch: {},
  created() {
    // 第三方平台登录
    this.getLoginByToken();
  },
  methods: {
    // 第三方平台单点登录系统
    getLoginByToken() {
      //获取地址栏中的token
      var token = this.$route.query.token;
      //调用登录的接口
      if (token == "" || token == undefined || token == null) {
        // 无token,跳转到登录页面
        this.$router.push({ path: "/login" }).catch(() => {});
      } else {
        // 第三方平台单点登录系统
        this.loading = true;
        var loginInfo = {
          token: token,
        };

        this.$store
          .dispatch("LoginByToken", loginInfo)
          .then((res) => {
            this.$message.success("登录成功");
            this.loading = false;
            //获取用户信息
            let roleName = res.data.roleName;
            if (roleName === "user") {
              sessionStorage.setItem("SSORoleName", roleName);
            }
            this.$router.push({ path: this.redirect || "/" }).catch(() => {});
          })
          .catch((err) => {
            console.log("登录失败", err);
            //异常信息
            this.loading = false;
          });
      }
    },
  },
};
</script>
Step:2 在store->modules的user.js中,实现LoginByToken

在这里插入图片描述

import { login, logout, getInfo, loginByToken } from '@/api/login'
    // 通过token单点登录
    LoginByToken({ commit }, userInfo) {
      const token = userInfo.token;
      return new Promise((resolve, reject) => {
        loginByToken({ token: token }).then(res => {
          setToken(res.token)
          commit('SET_TOKEN', res.token)
          resolve()
        })
      }).catch(error => {
        reject(error)
      })
    },

Step:3 在api目录的login.js中,实现loginByToken方法
// 通过token单点登录
export function loginByToken(token) {
  return request({
    url: '/ssoLogin',
    method: 'post',
    params: token
  })
}
Step:4 在router的index.js中,添加如下路由:
  {
    path: '/ssoLogin',
    component: () => import('@/views/ssoLogin'),
    hidden: true
  },
Step:5 在src的permission.js中,修改白名单如下:
const whiteList = ['/login', '/register', '/ssoLogin']

http://www.kler.cn/news/313386.html

相关文章:

  • Unity 设计模式 之 结构型模式 -【装饰者模式】【外观模式】【享元模式】【代理模式】
  • Java免税商品优选商城:Spring Boot实战
  • Redis-01 入门和十大数据类型
  • 英伟达Jim Fan预测:未来2~3年机器人将迎来“GPT-3时刻”
  • 【图像去噪】论文精读:Enhanced CNN for image denoising(ECNDNet)
  • 地图相关的系统软件及插件
  • Linux笔记---简单指令
  • 爬虫----webpack
  • ssrf攻击fastcgi复现及环境搭建
  • ITOP-2 分模块安装部署itop
  • OpenCV系列教程二:基本图像增强(数值运算)、滤波器(去噪、边缘检测)
  • jspdf踩坑 htmltocanvas
  • docker zookeeper集群启动报错:Cannot open channel to * at election address /ip:3888
  • C#身份验证那些事儿之注册服务AddAuthorization和AddAuthentication
  • tomcat的配置
  • 【LLM:Gemini】文本摘要、信息提取、验证和纠错、重新排列图表、视频理解、图像理解、模态组合
  • 避免服务器安装多个mysql引起冲突的安装方法
  • ubuntu安装mongodb实操学习
  • Python画笔案例-055 绘制七彩浪花
  • uni-app页面调用接口和路由(四)
  • 代码随想录算法训练营第三一天| 56. 合并区间 738.单调递增的数字 968.监控二叉树
  • C# 实时流转换为m3u8
  • docker 升级步骤
  • 从一个文本文件中挑选出符合条件的内容行
  • Java ----常用类
  • 算法课习题汇总(2)
  • java中SPI(服务提供者的接口)
  • 项目实训:CSS基本布局理解——WEB开发系列38
  • js中两种异步方式:async+await以及then
  • 梧桐数据库(WuTongDB):Volcano/Cascades 优化器框架简介