From 7afdf84ef12fb01ff75e7beedc885192e3476766 Mon Sep 17 00:00:00 2001 From: Seven Date: Thu, 11 Dec 2025 22:32:23 +0700 Subject: [PATCH] feat: add email sign up --- src/auth/components/signup.vue | 42 ++++----- src/auth/components/verify-code.vue | 139 ++++++++++++++++++++++++++++ src/auth/index.ts | 13 ++- src/auth/type.ts | 6 ++ src/composables/useAuth.ts | 15 +++ src/utils/index.ts | 2 + src/utils/ionic-helper.ts | 1 + src/utils/pattern.ts | 1 + 8 files changed, 192 insertions(+), 27 deletions(-) create mode 100644 src/auth/components/verify-code.vue create mode 100644 src/auth/type.ts create mode 100644 src/composables/useAuth.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/ionic-helper.ts create mode 100644 src/utils/pattern.ts diff --git a/src/auth/components/signup.vue b/src/auth/components/signup.vue index b8df156..09bcaef 100644 --- a/src/auth/components/signup.vue +++ b/src/auth/components/signup.vue @@ -1,31 +1,25 @@ diff --git a/src/auth/components/verify-code.vue b/src/auth/components/verify-code.vue new file mode 100644 index 0000000..2721253 --- /dev/null +++ b/src/auth/components/verify-code.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/auth/index.ts b/src/auth/index.ts index 4d597ba..28565af 100644 --- a/src/auth/index.ts +++ b/src/auth/index.ts @@ -1,12 +1,19 @@ import { modalController } from "@ionic/vue"; +import { emailOTPClient } from "better-auth/client/plugins"; import { createAuthClient } from "better-auth/vue"; +import SignupContent from "./components/signup.vue"; export const authClient = createAuthClient({ baseURL: import.meta.env.VITE_BASE_API_URL, // The base URL of your auth server + plugins: [emailOTPClient()], }); -export function signupController() { - return modalController.create({ - component: () => import("./components/signup.vue"), +export async function modelControllerSignup(presentingElement?: HTMLElement) { + const modal = await modalController.create({ + component: SignupContent, + presentingElement, + canDismiss: async (data, role) => role !== "gesture", }); + + return modal; } diff --git a/src/auth/type.ts b/src/auth/type.ts new file mode 100644 index 0000000..f2076c1 --- /dev/null +++ b/src/auth/type.ts @@ -0,0 +1,6 @@ +export interface AuthUserSignup { + email: string; + password: string; + confirmPassword: string; + verificationCode: string; +} diff --git a/src/composables/useAuth.ts b/src/composables/useAuth.ts new file mode 100644 index 0000000..e23ed69 --- /dev/null +++ b/src/composables/useAuth.ts @@ -0,0 +1,15 @@ +import { authClient } from "@/auth"; + +export function useAuth() { + // Better Auth ζδΎ›ηš„ session + const session = authClient.useSession(); + + const user = computed(() => session.value.data?.user); + const isAuthenticated = computed(() => !!session.value.data); + + return { + user, + session, + isAuthenticated, + }; +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..7cd62fb --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from "./ionic-helper"; +export * from "./pattern"; diff --git a/src/utils/ionic-helper.ts b/src/utils/ionic-helper.ts new file mode 100644 index 0000000..c30ee43 --- /dev/null +++ b/src/utils/ionic-helper.ts @@ -0,0 +1 @@ +export type PageInstance = InstanceType; diff --git a/src/utils/pattern.ts b/src/utils/pattern.ts new file mode 100644 index 0000000..8d09dc6 --- /dev/null +++ b/src/utils/pattern.ts @@ -0,0 +1 @@ +export const emailPattern = /^[^\s@]+@[^\s@][^\s.@]*\.[^\s@]+$/;