本文实现的功能是从其他系统携带身份验证字段通过iframe嵌套到我们系统中某个页面,当校验到身份证号有权限时接口直接返回token进入系统,无需再登录。
- index.vue
import useUserStore from "@/store/modules/user";
// 在进入页面时,获取浏览器地址中我们协定好的身份证字段PSign,当获取到PSign后先将之前token清除,再将PSign给到接口获取token,获取到token则标识用户有权限,并将token存储到vuex中,否则无权限
// 若没有PSign,但可以获取到登录的token,表示是从我们系统登录进入的
// 若PSign和登录token都获取不到,则不进入
onMounted(() => {
let urlObj = getQueryObject(decodeURIComponent(window.location.href))
const token = getToken();
if (urlObj.PSign) {
removeToken();
let param = new FormData();
param.append("PSign", urlObj.PSign);
useUserStore().loginByIdNumber(param).then((res) => {
viewFlag.value = true;
initData();
}, (err) => {
viewFlag.value = false;
}
);
} else if (token) {
viewFlag.value = true;
initData();
} else {
viewFlag.value = false;
}
})
- src/utils/index.js 公共方法获取地址栏字段
/**
* @param {string} url
* @returns {Object}
*/
export function getQueryObject(url) {
url = url == null ? window.location.href : url;
const search = url.substring(url.lastIndexOf("?") + 1);
const obj = {};
const reg = /([^?&=]+)=([^?&=]*)/g;
search.replace(reg, (rs, $1, $2) => {
const name = decodeURIComponent($1);
let val = decodeURIComponent($2);
val = String(val);
obj[name] = val;
return rs;
});
return obj;
}
token需改存储到sessionStorage中,了解可查看【https://blog.csdn.net/carry_chenxiaodong/article/details/114278838】