当前位置:首页 » 《我的小黑屋》 » 正文

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

4 人参与  2024年10月26日 18:02  分类 : 《我的小黑屋》  评论

点击全文阅读


什么是单点登录

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

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

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://zhangshiyu.com/post/178189.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1