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 +++++++++++++++++++++++++++++----------- src/api/login.ts | 24 ++++------- src/api/types.ts | 9 +++- 3 files changed, 73 insertions(+), 40 deletions(-) diff --git a/src/api/login.ts b/src/api/login.ts index 655d6c9..d4ceb49 100644 --- a/src/api/login.ts +++ b/src/api/login.ts @@ -2,6 +2,7 @@ import { AxiosPromise } from 'axios'; import { LoginData, LoginResult, VerifyCodeResult, TenantInfo } from './types'; import { UserInfo } from '@/api/system/user/types'; +import { da } from 'element-plus/es/locale'; /** * @param data {LoginData} @@ -9,13 +10,9 @@ */ export function login(data: LoginData): AxiosPromise<LoginResult> { const params = { - tenantId: data.tenantId, - username: data.username.trim(), - password: data.password, - code: data.code, - uuid: data.uuid, - clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e', - grantType: 'password' + ...data, + clientId: data.clientId || 'e5cd7e4891bf95d1d19206ce24a7b32e', + grantType: data.grantType || 'password' }; return request({ url: '/auth/login', @@ -66,19 +63,16 @@ * 绗笁鏂圭櫥褰� * @param source 绗笁鏂圭櫥褰曠被鍨� * */ -export function socialLogin(source: string, tenantId: string, code: any, state: any): AxiosPromise<any> { - const data = { - socialCode: code, - socialState: state, - source, - tenantId, +export function callback(data: LoginData): AxiosPromise<any> { + const LoginData = { + ...data, clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e', grantType: 'social' }; return request({ - url: '/auth/social-login', + url: '/auth/social/callback', method: 'post', - data: data + data: LoginData }); } diff --git a/src/api/types.ts b/src/api/types.ts index 8ca204f..e02e645 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -15,10 +15,13 @@ * 鐧诲綍璇锋眰 */ export interface LoginData { - tenantId: string; - username: string; - password: string; + tenantId?: string; + username?: string; + password?: string; rememberMe?: boolean; + socialCode?: string, + socialState?: string, + source?: string, code?: string; uuid?: string; clientId: string; 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