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