diff --git a/src/service/api/auth.ts b/src/service/api/auth.ts index 7d158e5..2b8b02f 100644 --- a/src/service/api/auth.ts +++ b/src/service/api/auth.ts @@ -46,3 +46,11 @@ export function fetchRefreshToken(refreshToken: string) { export function fetchCustomBackendError(code: string, msg: string) { return request({ url: '/auth/error', params: { code, msg } }); } + +export function fetchAuthLoginToken(token: string) { + return request({ + url: '/auth/login/token', + method: 'post', + data: { token } + }); +} diff --git a/src/store/modules/auth/index.ts b/src/store/modules/auth/index.ts index 88a6ee3..b36e804 100644 --- a/src/store/modules/auth/index.ts +++ b/src/store/modules/auth/index.ts @@ -4,7 +4,7 @@ import { defineStore } from 'pinia'; import { useLoading } from '@sa/hooks'; import { SetupStoreId } from '@/enum'; import { useRouterPush } from '@/hooks/common/router'; -import { fetchGetUserInfo, fetchLogin, fetchVersion } from '@/service/api'; +import { fetchAuthLoginToken, fetchGetUserInfo, fetchLogin, fetchVersion } from '@/service/api'; import { localStg } from '@/utils/storage'; import { $t } from '@/locales'; import { roleTypeRecord } from '@/constants/business'; @@ -97,6 +97,36 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => { endLoading(); } + /** + * Login + * + * @param authToken token + * @param [redirect=true] Whether to redirect after login. Default is `true` + */ + async function loginByAuthToken(authToken: string, redirect = true) { + startLoading(); + + const { data: loginToken, error } = await fetchAuthLoginToken(authToken); + + if (!error) { + const pass = await loginByToken(loginToken); + + if (pass) { + await redirectFromLogin(redirect); + + window.$notification?.success({ + title: $t('page.login.common.loginSuccess'), + content: $t('page.login.common.welcomeBack', { userName: userInfo.userName }), + duration: 4500 + }); + } + } else { + resetStore(); + } + + endLoading(); + } + async function loginByToken(loginToken: Api.Auth.LoginToken) { // 1. stored in the localStorage, the later requests need it in headers localStg.set('token', loginToken.token); @@ -190,6 +220,7 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => { loginLoading, resetStore, login, + loginByAuthToken, getUserInfo, initUserInfo, initAppVersion, diff --git a/src/views/_builtin/login/modules/pwd-login.vue b/src/views/_builtin/login/modules/pwd-login.vue index cc83bc1..77b4938 100644 --- a/src/views/_builtin/login/modules/pwd-login.vue +++ b/src/views/_builtin/login/modules/pwd-login.vue @@ -1,6 +1,7 @@