feat: 重构用户认证逻辑,添加导航重定向功能,更新相关组件和路由
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user