最近接到个需求,就是实现免密登录,用户在url参数中携带加密的token,直接进入首页,不需要登录,具体实现如下:
在router.beforeEach守卫中进行处理
router.beforeEach(async (to: any, from, next) => {
const token = to.query.token // 从路由参数中获取 token
//判断url是否携带token
if (to.meta.whiteList && token) {
const decodedToken = Base64.decode(token);// 解密 Base64 编码的 token
//验证 token 的有效性并登录用户
let data = {
token: decodedToken
}
try {
let res:any = await checktoken(data)
// .then((res: any) => {
// 验证成功,将用户信息保存到全局状态管理或本地存储 pinia
if (res.code == 0) {
storage.local.set('token', res.data.accessToken);
// storage.local.set('token', Base64.decode(token));
storage.local.set('username', res.data.userName)
storage.local.set('expiresTime', res.data.expiresTime)
storage.local.set('tenantid', JSON.stringify(res.data.tenantId))
let asTenant = ref({
id: res.data.tenantId,
name: res.data.tenantName
})
storage.local.set('asTenant', JSON.stringify(asTenant.value))
userStore.token = res.data.accessToken
userStore.username = res.data.userName
userStore.expiresTime = res.data.expiresTime
userStore.tenantid = res.data.tenantId
userStore.asTenant = asTenant.value
//修改登录状态
userStore.isLogin = true
// console.log(userStore.isLogin);
}
// })
}
catch (error) {
// console.log(error, '222');
userStore.urltoken = true
}
}