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

什么是单点登录

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

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

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)          
                      }
                }
            })
        }
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值