From 14cf3be392dca0afeb4f51114c5dc62b59576b30 Mon Sep 17 00:00:00 2001 From: thiszhc <2029364173@qq.com> Date: 星期六, 01 七月 2023 16:24:48 +0800 Subject: [PATCH] 统一授权登录 --- src/layout/components/SocialLogin/index.vue | 80 +++++++++++++++++++++++++++++----------- 1 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/layout/components/SocialLogin/index.vue b/src/layout/components/SocialLogin/index.vue index 5c04df5..7656673 100644 --- a/src/layout/components/SocialLogin/index.vue +++ b/src/layout/components/SocialLogin/index.vue @@ -3,11 +3,11 @@ </template> <script setup lang="ts"> -import { socialLogin } from '@/api/login'; +import { login, callback } from '@/api/login'; import { setToken } from '@/utils/auth'; import Cookies from 'js-cookie'; import { getToken } from '@/utils/auth'; -import router from '@/router'; +import { LoginData } from '@/api/types'; const route = useRoute(); const loading = ref(true); @@ -17,30 +17,66 @@ * 鎺ユ敹Route浼犻�掔殑鍙傛暟 * @param {Object} route.query. */ -const code = route.query.code; -const state = route.query.state; +const code = route.query.code as string; +const state = route.query.state as string; const source = route.query.source as string; const tenantId = Cookies.get("tenantId") ? Cookies.get("tenantId") as string : '000000'; -/** - * 閫氳繃code鑾峰彇token - * @param {string} source - * @param {string} code - * @param {string} state - */ -await socialLogin(source, tenantId, code, state) - .then(async (res) => { - if (res.code !== 200) { - ElMessage.error(res.msg); - location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; - return; - } + +const processResponse = async (res: any) => { + if (res.code !== 200) { + throw new Error(res.msg); + } + setToken(res.data.access_token); + ElMessage.success(res.msg); + location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; +}; + +const handleError = (error: any) => { + ElMessage.error(error.message); + location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; +}; + +const callbackByCode = async (data: LoginData) => { + try { + const res = await callback(data); + await processResponse(res); loading.value = false; - setToken(res.data.access_token) - ElMessage.success(res.msg); - location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; - }) - .catch(() => { + } catch (error) { + handleError(error); + } +}; + +const loginByCode = async (data: LoginData) => { + try { + const res = await login(data); + await processResponse(res); loading.value = false; + } catch (error) { + handleError(error); + } +}; + +const init = async () => { + const data: LoginData = { + socialCode: code, + socialState: state, + tenantId: tenantId, + source: source, + clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e', + grantType: 'social' + }; + + if (!getToken()) { + await loginByCode(data); + } else { + await callbackByCode(data); + } +}; + +onMounted(() => { + nextTick(() => { + init(); }); +}); </script> -- Gitblit v1.9.3