diff --git a/app.vue b/app.vue index 4c48f4b..1186dc7 100644 --- a/app.vue +++ b/app.vue @@ -18,8 +18,9 @@ useSeoMeta({ }) onMounted(() => { - loginState.checkSession().then(async (res) => { - if (!res && loginState.token) { + loginState.checkSession().then(async (loggedIn) => { + if (route.meta.preventLoginCheck) return + if (!loggedIn && loginState.token) { toast.add({ title: '登录失效', description: '登录已过期,请重新登录', @@ -27,7 +28,7 @@ onMounted(() => { icon: 'i-tabler-alert-triangle', }) modal.open(ModalAuthentication) - } else if (!res && !loginState.token) { + } else if (!loggedIn && !loginState.token) { // Prevents redirect from register page if (route.path === '/user/register') return router.replace('/user/authenticate') diff --git a/pages/user/authenticate.vue b/pages/user/authenticate.vue index 028a3f7..d5dab1a 100644 --- a/pages/user/authenticate.vue +++ b/pages/user/authenticate.vue @@ -4,12 +4,14 @@ import { object, string, type InferType } from 'yup' definePageMeta({ layout: 'authenticate', + preventLoginCheck: true }) useSeoMeta({ title: '登录', }) +const route = useRoute() const router = useRouter() const toast = useToast() const loginState = useLoginState() @@ -327,6 +329,39 @@ const onForgetPasswordSubmit = ( }) }) } + +onMounted(() => { + const { token, user_id } = route.query + if (!token || !user_id) { + return + } + loginState.token = token.toString() + loginState.user.id = user_id as unknown as number + loginState + .updateProfile() + .then(() => { + loginState.checkSession() + toast.add({ + title: '登录成功', + description: `合作渠道认证成功`, + color: 'primary', + icon: 'i-tabler-login-2', + }) + router.replace('/') + }) + .catch((err) => { + toast.add({ + title: '认证失败', + description: err.msg || 'Token 或 UserID 无效', + color: 'red', + icon: 'i-tabler-circle-x', + }) + router.replace('/') + }) + .finally(() => { + final_loading.value = false + }) +})