From 4cf836055a02ed2dfd6fa4fd543366a7c2e06608 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期日, 02 七月 2023 15:40:13 +0800 Subject: [PATCH] !23 统一登录,授权 Merge pull request !23 from 三个三/auth --- src/layout/components/SocialLogin/index.vue | 82 ++++++++++++++++++++++++++++++++--------- 1 files changed, 64 insertions(+), 18 deletions(-) diff --git a/src/layout/components/SocialLogin/index.vue b/src/layout/components/SocialLogin/index.vue index 127007b..7656673 100644 --- a/src/layout/components/SocialLogin/index.vue +++ b/src/layout/components/SocialLogin/index.vue @@ -3,34 +3,80 @@ </template> <script setup lang="ts"> -import {socialLogin} from '@/api/login'; -import {setToken} from '@/utils/auth'; +import { login, callback } from '@/api/login'; +import { setToken } from '@/utils/auth'; +import Cookies from 'js-cookie'; +import { getToken } from '@/utils/auth'; +import { LoginData } from '@/api/types'; const route = useRoute(); -const router = useRouter(); +const loading = ref(true); /** * 鎺ユ敹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 loading = ref(true); -await socialLogin(source, 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 tenantId = Cookies.get("tenantId") ? Cookies.get("tenantId") as string : '000000'; + + +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.msg); - ElMessage.success('鐧诲綍鎴愬姛'); - 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