mirror of
				https://github.com/massbug/judge4c.git
				synced 2025-11-04 02:35:16 +00:00 
			
		
		
		
	feat(auth): enhance signIn and signUp with error handling and form value types
This commit is contained in:
		
							parent
							
								
									c9c07664cf
								
							
						
					
					
						commit
						bef8dcee44
					
				@ -4,16 +4,37 @@ import bcrypt from "bcrypt";
 | 
				
			|||||||
import prisma from "@/lib/prisma";
 | 
					import prisma from "@/lib/prisma";
 | 
				
			||||||
import { signIn } from "@/lib/auth";
 | 
					import { signIn } from "@/lib/auth";
 | 
				
			||||||
import { authSchema } from "@/lib/zod";
 | 
					import { authSchema } from "@/lib/zod";
 | 
				
			||||||
import { redirect } from "next/navigation";
 | 
					import { Prisma } from "@prisma/client";
 | 
				
			||||||
 | 
					import { CredentialsSignInFormValues } from "@/components/credentials-sign-in-form";
 | 
				
			||||||
 | 
					import { CredentialsSignUpFormValues } from "@/components/credentials-sign-up-form";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const saltRounds = 10;
 | 
					const saltRounds = 10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function signInWithCredentials(formData: { email: string; password: string }) {
 | 
					export async function signInWithCredentials(formData: CredentialsSignInFormValues) {
 | 
				
			||||||
  await signIn("credentials", formData);
 | 
					  try {
 | 
				
			||||||
 | 
					    await signIn("credentials", {
 | 
				
			||||||
 | 
					      ...formData,
 | 
				
			||||||
 | 
					      redirect: false,
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    return { success: true };
 | 
				
			||||||
 | 
					  } catch (error) {
 | 
				
			||||||
 | 
					    if (error instanceof Error) {
 | 
				
			||||||
 | 
					      return { error: error.message };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return { error: "Failed to sign in. Please try again." };
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function signUpWithCredentials(formData: { email: string; password: string }) {
 | 
					export async function signUpWithCredentials(formData: CredentialsSignUpFormValues) {
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
    const validatedData = await authSchema.parseAsync(formData);
 | 
					    const validatedData = await authSchema.parseAsync(formData);
 | 
				
			||||||
 | 
					    const existingUser = await prisma.user.findUnique({
 | 
				
			||||||
 | 
					      where: { email: validatedData.email },
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (existingUser) {
 | 
				
			||||||
 | 
					      throw new Error("User already exists");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const pwHash = await bcrypt.hash(validatedData.password, saltRounds);
 | 
					    const pwHash = await bcrypt.hash(validatedData.password, saltRounds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -32,5 +53,16 @@ export async function signUpWithCredentials(formData: { email: string; password:
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  redirect("/sign-in");
 | 
					    return { success: true };
 | 
				
			||||||
 | 
					  } catch (error) {
 | 
				
			||||||
 | 
					    if (error instanceof Prisma.PrismaClientKnownRequestError) {
 | 
				
			||||||
 | 
					      if (error.code === "P2002") {
 | 
				
			||||||
 | 
					        return { error: "Email already registered" };
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (error instanceof Error) {
 | 
				
			||||||
 | 
					      return { error: error.message };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return { error: "Registration failed. Please try again." };
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user