Vue项目接入SSO后如何正确跳转并获取用户信息?
我们公司最近在搞统一认证,前端用 Vue 接入了公司的 SSO 系统。登录成功后会重定向回我的应用,URL 带了个 token 参数,但我发现有时候拿不到用户信息,或者页面刷新后状态就丢了。我现在的做法是在 App.vue 里一进来就解析 URL 的 token 并调接口,但感觉不太稳。
比如这段代码:
<script setup>
import { onMounted } from 'vue'
import { useUserStore } from '@/stores/user'
onMounted(() => {
const urlParams = new URLSearchParams(window.location.search)
const token = urlParams.get('sso_token')
if (token) {
localStorage.setItem('auth_token', token)
window.history.replaceState(null, '', window.location.pathname) // 清掉 URL 参数
useUserStore().fetchUserInfo() // 调接口拿用户数据
}
})
</script>
但有时候用户直接刷新页面,URL 里没 token 了,store 也空了,就得重新跳去 SSO 登录页。有没有更靠谱的流程?是不是该用 OAuth2 的隐式模式或者 PKCE?
1. 在路由守卫里检查token,没有就跳SSO登录
2. 拿到token后存localStorage+store双保险
3. 每次请求header带上token
试试这个路由守卫代码:
对了,记得axios拦截器也要配token,不然刷新后请求会挂。