vue 前端 用iframe实现单点登录两个不同域名Vue项目相互跳转并且传递Token

news/2024/12/26 5:14:02 标签: 前端, vue.js, javascript

什么是单点登录

单点登录,字面意思 :仅点一次就可以登录。

在公司的业务系统中,往往会有多个系统,并且这几个系统对应的都是同一个登录接口。次次登录对于公司用户体验肯定是不好的,对于后端上请求登录接口的频率也会增多。所以就有了这个单点登录:多个系统使用同一个登录接口,只需要登录一次就可以使得多个系统免登进入。

A网页:

 data: function() {
        return {         
            qdmDdUrl: 'http://127.0.0.1:8081/#/Loginst?dd=1',
            Isdddl: false

        };
    },



Jumpshuangd() {
            var that = this;
            this.Isdddl = true;
            var token = '',  username = 'AAA', password = 'BBB';
            axios
                .ajax({
                    url: 'xxxxxxxxxx',
                    method: 'post',
                    isShowLoading: false,
                    data: {
                        username: username,
                        password: password,                   
                    }
                }).then(res => {
                token = res.data.access_token;             
                const iframe = document.createElement('iframe');
                //设置iframe样式,使其不可见
                iframe.setAttribute(
                    'style',
                    'position:absolute;width:10px;height:10px;left:-20px;top:-20px;'
                );
                iframe.setAttribute(
                    'allow',
                    'payment'
                );
                //将iframe地址改为目标系统
                iframe.src = this.qdmDdUrl;
                document.body.append(iframe);
                iframe.onload = () => {
                    iframe.contentWindow.postMessage(
                        { token: token, name: username },//可以以对象形式传参,也可以直接传字符串"aaa"
                        that.qdmDdUrl//嵌入页面的路径,也可以直接传"*"
                    );
                    setTimeout(function() {
                        iframe.remove();
                    }, 5000);
                    // //新开页签,跳转到目标系统地址
                    setTimeout(function() {
                        that.Isdddl = false;
                        window.open('http://127.0.0.1:8081/#/dashboard', '_blank');
                    }, 2000);
                };
            });
        }

需要实现免登录的子系统,可在index.html中添加:

created() {
        let that=this;
        // 父页面发送的消息
        let dd = this.$route.query.dd;
        if (dd == 1) {
            window.parent.postMessage('childLoaded', '*');
            window.addEventListener('message',e => {
                const origin = [
                    'http://http://127.0.0.1:8081',
                    'http://http://127.0.0.1:8080',
                     .....
                ]
                if(origin.includes(event.origin)){
                      if (e.data.type == undefined) {                     
                        
                        window.localStorage.setItem('cookie', event.data.tooken)          
                      }
                }
            })
        }
    },

http://www.niftyadmin.cn/n/5799847.html

相关文章

AI 机器人外呼:智能沟通,开启全新营销与服务篇章

在当今数字化高速发展的时代,企业的营销与客户服务方式正经历着深刻变革。 AI 机器人外呼作为一项创新技术,正逐渐崭露头角,成为众多企业提升效率、优化客户体验的得力助手。 你是否接到过这样的电话:声音清晰流畅,对…

认知战认知作战:朱元璋恢复科举制度与明朝的认知战

认知战认知作战:朱元璋恢复科举制度与明朝的认知战 认知战认知作战:朱元璋恢复科举制度与明朝的认知战 关键词 认知作战,新质生产力,人类命运共同体,认知战,认知域,认知战研究中心,认知战争,认知战战术,认知战战略,认知域作战研究,认知作战,认知控制,…

memcached 与 redis 的区别?

1、Redis 不仅 仅 支 持 简 单 的 k/v 类型 的 数 据 ,同时 还 提 供 list,set,zset,hash等数 据 结 构 的 存 储 。而 memcache 只支 持 简 单 数 据 类 型 ,需要 客 户 端 自 己 处 理 复杂对 象 2、 Redis 支持 数 …

【vue】css模拟玻璃球体效果(带高光)

div部分&#xff1a; <div class"wave_ball"><!-- 高光部分--><div class"lightBg light1"></div><div class"lightBg light2"></div></div>样式部分&#xff1a; .wave_ball {position: …

es快速扫描

介绍 Elasticsearch简称es&#xff0c;一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群&#xff0c;处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对&#xff0c;正排索引是根据id进行索引&#xff0c;所以查询效率非常高&#xff0c;但是模糊…

Linux搭建TRELLIS详细流程

TRELLIS是最新的3D生成模型,官网地址如下: https://github.com/microsoft/TRELLIS 下面是详细的搭建流程。 由于是在Ubuntu系统上搭建的,下面操作仅限Ubuntu系统查看。 不过Windows系统大同小异,而且青龙大佬已经做了相关整理。 Windows系统的可以去看青龙大佬的b站视…

【es6复习笔记】迭代器(10)

什么是迭代器&#xff1f; 迭代器&#xff08;Iterator&#xff09;是一种对象&#xff0c;它能够遍历并访问一个集合中的元素。在 JavaScript 中&#xff0c;迭代器提供了一种统一的方式来处理各种集合&#xff0c;如数组、字符串、Map、Set 等。通过迭代器&#xff0c;我们可…

Docker之技术架构【八大架构演进之路】

Docker之技术架构 1. 八大架构演进之路1.1 单机架构1.2 应用数据分离架构1.3 应用服务集群架构1.4 读写分离架构1.5 冷热分离架构1.6 垂直分库架构1.7 微服务架构1.8 容器编排架构&#xff08;docker出现&#xff09; 2. 一个互联网实战架构 本章意在让大家了解Docker出现的历史…