| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import { ElMessage } from 'element-plus';
- import { useUserStore } from '@/store/modules/user';
- import { getCBrainRedirectUrl } from '@/utils/getRedirectUrl';
- import { handleTokenFromUrl } from '@/utils/handleTokenFromUrl';
- import { checkOAuthCode } from '@/api/system/user';
- import { PageEnum } from '@/enums/pageEnum';
- import type { NavigationGuardNext, RouteLocationNormalized } from 'vue-router';
- /**
- * C大脑 OAuth2.0 单点登录路由前置守卫
- * - 无 code:重定向到 C大脑授权服务器
- * - 有 code:用 code 换 token,写存储,拉用户信息,再跳转首页
- */
- export async function checkCBrainOAuthToken(
- to: RouteLocationNormalized,
- _from: RouteLocationNormalized,
- next: NavigationGuardNext,
- ) {
- const userStore = useUserStore();
- const codeFromUrl = to.query.code as string | undefined;
- if (!codeFromUrl) {
- window.location.href = getCBrainRedirectUrl();
- return;
- }
- // 有code:换取token
- try {
- // 单点登录OAuth2.0 通过code请求接口,获取token
- const { satoken } = await checkOAuthCode(codeFromUrl);
- userStore.setToken(satoken);
- handleTokenFromUrl(satoken);
- try {
- await userStore.GetInfo();
- } catch (err: any) {
- console.log('catch getInfo error', err);
- // c大脑登录失败的时候不需要跳转到登录页面
- ElMessage.error(err.message);
- return;
- }
- next(PageEnum.BASE_HOME);
- } catch {
- ElMessage.error('获取token失败');
- }
- }
|