feat: 重构用户认证逻辑,添加导航重定向功能,更新相关组件和路由

This commit is contained in:
2025-12-21 02:37:01 +07:00
parent b957eb7cc2
commit 7fcb2555a3
18 changed files with 104 additions and 67 deletions

View File

@@ -1,11 +1,14 @@
<script lang='ts' setup>
import type { EmailVerifyClient, PhoneNumberVerifyClient } from "@/api/types";
import { closeOutline } from "ionicons/icons";
import { authClient } from "@/auth";
import EmailLogin from "./components/email.vue";
import PhoneNumberLogin from "./components/phone-number.vue";
const { t } = useI18n();
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
async function handleSignInEmail(value: EmailVerifyClient) {
const { data } = await authClient.signIn.emailOtp({
@@ -13,7 +16,8 @@ async function handleSignInEmail(value: EmailVerifyClient) {
otp: value.otp,
});
if (data?.token) {
router.back();
userStore.setToken(data.token);
useNavigateToRedirect(route.query.redirect as string);
}
}
async function handleSignInPhoneNumber(value: PhoneNumberVerifyClient) {
@@ -24,7 +28,8 @@ async function handleSignInPhoneNumber(value: PhoneNumberVerifyClient) {
updatePhoneNumber: false,
});
if (data?.token) {
router.back();
userStore.setToken(data.token);
useNavigateToRedirect(route.query.redirect as string);
}
}
</script>
@@ -33,7 +38,11 @@ async function handleSignInPhoneNumber(value: PhoneNumberVerifyClient) {
<IonPage>
<IonHeader class="ion-no-border">
<IonToolbar class="ui-toolbar">
<ion-back-button slot="start" />
<ion-buttons slot="start">
<ion-button @click="$router.back()">
<ion-icon slot="icon-only" :icon="closeOutline" />
</ion-button>
</ion-buttons>
<ion-button slot="end" fill="clear" @click="router.push('/auth/signup')">
{{ t('auth.login.signupButton') }}
</ion-button>

View File

@@ -1,7 +1,8 @@
<script lang='ts' setup>
import { copyOutline, qrCodeOutline, shareOutline } from "ionicons/icons";
const { user } = useAuth();
const userStore = useUserStore();
const { user } = storeToRefs(userStore);
</script>
<template>

View File

@@ -7,7 +7,8 @@ import * as yup from "yup";
import { safeClient } from "@/api";
import { authClient, emailSchema } from "@/auth";
const { user } = useAuth();
const userStore = useUserStore();
const { user } = storeToRefs(userStore);
const email = ref(user.value?.email || "");
const { updateProfile } = useUserStore();
const { t } = useI18n();

View File

@@ -6,6 +6,7 @@ import { authClient } from "@/auth";
const router = useRouter();
const userStore = useUserStore();
const { user, userProfile } = storeToRefs(userStore);
async function handleSignOut() {
const alert = await alertController.create({
@@ -20,6 +21,7 @@ async function handleSignOut() {
text: "Sign Out",
role: "destructive",
handler: async () => {
userStore.signOut();
authClient.signOut();
router.replace("/layout/riwa");
},
@@ -88,7 +90,7 @@ async function handleSignOut() {
</div>
</div>
<div class="end">
{{ userStore.state.userProfile?.nickname }}
{{ userProfile?.nickname }}
</div>
</div>
</ion-item>
@@ -101,7 +103,7 @@ async function handleSignOut() {
</div>
</div>
<div class="end">
{{ userStore.state.session?.email }}
{{ user?.email }}
</div>
</div>
</ion-item>

View File

@@ -2,10 +2,10 @@
import { toastController } from "@ionic/vue";
import { arrowBackOutline } from "ionicons/icons";
import { client, safeClient } from "@/api";
import { authClient } from "@/auth";
const userStore = useUserStore();
const nickname = ref(userStore.state.userProfile?.nickname || "");
const { userProfile } = storeToRefs(userStore);
const nickname = ref(userProfile.value?.nickname || "");
const { updateProfile } = useUserStore();
async function handleSave() {

View File

@@ -4,7 +4,8 @@ import { arrowBackOutline } from "ionicons/icons";
import { safeClient } from "@/api";
import { authClient } from "@/auth";
const { user } = useAuth();
const userStore = useUserStore();
const { user } = storeToRefs(userStore);
const username = ref(user.value?.username || "");
const { updateProfile } = useUserStore();

View File

@@ -1,7 +1,8 @@
<script lang='ts' setup>
import { chevronForwardOutline, copyOutline, qrCodeOutline } from "ionicons/icons";
const { user } = useAuth();
const userStore = useUserStore();
const { user } = storeToRefs(userStore);
</script>
<template>