Refactor authentication actions and add user verification functionality

- Updated signin and signup actions to correctly handle phone number redirection and date of birth formatting.
- Introduced a new user-actions file to implement user verification logic.
- Added an auth guard to restrict access based on user roles.
- Enhanced the auth configuration to include user roles and language settings.
- Improved validation schemas for user input in the signup form.
This commit is contained in:
2024-11-27 14:17:06 +05:00
parent 1b43c85491
commit 3f68d835fe
5 changed files with 69 additions and 7 deletions

13
lib/auth-guard.ts Normal file
View File

@ -0,0 +1,13 @@
import { auth } from "@/lib/auth";
import { redirect } from "next/navigation";
import { headers } from "next/headers";
const session = await auth.api.getSession({
headers: await headers(),
});
export async function AdminAuthGuard() {
if (session?.user.role !== "ADMIN") {
return redirect("/login");
}
return true;
}

View File

@ -6,6 +6,21 @@ import { phoneNumber } from "better-auth/plugins";
const prisma = new PrismaClient();
export const auth = betterAuth({
user: {
additionalFields: {
role: {
type: "string",
required: false,
defaultValue: "USER",
input: false, // don't allow user to set role
},
lang: {
type: "string",
required: false,
defaultValue: "en",
},
},
},
database: prismaAdapter(prisma, {
provider: "sqlite", // or "mysql", "postgresql", ...etc
}),

View File

@ -6,8 +6,14 @@ export const signUpFormSchema = z.object({
.min(2, { message: "ID Card is required" })
.regex(/^[A][0-9]{6}$/, "Please enter a valid ID Card number."),
atoll_id: z.string().min(2, { message: "Atoll is required." }),
island_id: z.string().min(2, { message: "Island is required." }),
island_id: z
.string({ required_error: "Island is required." })
.min(2, { message: "Island is required." }),
house_name: z.string().min(2, { message: "House name is required." }),
dob: z.coerce.date({ message: "Date of birth is required." }),
phone_number: z.string().min(7, { message: "Phone number is required." }).regex(/^[79][0-9]{2}[0-9]{4}$/, "Please enter a valid phone number").transform((val) => val.replace(/\D/g, "")),
phone_number: z
.string()
.min(7, { message: "Phone number is required." })
.regex(/^[79][0-9]{2}[0-9]{4}$/, "Please enter a valid phone number")
.transform((val) => val.replace(/\D/g, "")),
});