vue中两个项目之前免登录
背景:最近跟客户对接,对方希望打通两个项目之前的权限,在客户项目A中点击一个按钮直接跳转到我们项目B的首页,跳过B项目的登录拦截,实现免登录跳转
思路:在A项目中点击跳转按钮跳转时会向后端请求一个接口,后端会返回新项目的域名+参数(例如loginName),前端需要将这个参数通过路由传递,在B项目中的路由守卫中获取到当前的路径,判断有loginName是否有值,有的话把loginName作为参数传入后端的免密登录的接口,后端返回token,前端存储token并直接跳转到首页
1.A项目的button事件
jumpProject() {
getUrl().then((res) => {
if (res.data.code === 2000) {
//新页面打开
window.open(
res.data.data.url + "?loginName=" + res.data.data.code,
"_blank"
);
}
})
}
2.B项目全局路由守卫
const createRouter = () => new Router({
mode: 'history', // hissoty模式 需要后端支持
scrollBehavior: () => ({
y: 0
}),
routes: constantRoutes
})
const router = createRouter()
router.beforeEach(async(to, from, next) => {
document.title = getPageTitle(to.meta.title)
//获取token
const hasToken = getToken()
// 获取当前跳转的路径
var hrefs = window.location.href
// 判断是否有loginName
let hrefIdx = hrefs.indexOf('loginName=');
//截取loginName=后面的字符串
let loginName = hrefs.substring(hrefIdx + 10, hrefs.length);
if (hrefIdx > -1 && (hasToken === '' || hasToken === undefined || hasToken === null)) {
let params = {
loginName: loginName
}
// 调用单点登录接口_ 状态码成功直接进入首页
const { code } = await store.dispatch('user/login712', params);
if (code == 2000) {
//获取当前用户id
const { id } = await store.dispatch('user/getInfo')
// 获取菜单
const accessRoutes = await store.dispatch('permission/generateRoutes',id)
//添加路由
router.addRoutes(accessRoutes)
//跳转首页
// 替换路由(如果不替换,直接登录到首页,会在A项目的路径后边直接加入B项目的路径)
location.href = '/'
next()
}
} else {
//正常的逻辑
}
欢迎各位大佬指教~