Spaces:
Running
Running
File size: 3,731 Bytes
67c7241 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
"use server";
import { createClient } from "@/lib/supabase/server";
import { redirect } from "next/navigation";
export async function signIn(prevState: any, formData: FormData) {
const email = formData.get("email") as string;
const password = formData.get("password") as string;
const returnUrl = formData.get("returnUrl") as string | undefined;
if (!email || !email.includes('@')) {
return { message: "Please enter a valid email address" };
}
if (!password || password.length < 6) {
return { message: "Password must be at least 6 characters" };
}
const supabase = await createClient();
const { error } = await supabase.auth.signInWithPassword({
email,
password
});
if (error) {
return { message: error.message || "Could not authenticate user" };
}
return redirect(returnUrl || "/dashboard");
}
export async function signUp(prevState: any, formData: FormData) {
const origin = formData.get("origin") as string;
const email = formData.get("email") as string;
const password = formData.get("password") as string;
const confirmPassword = formData.get("confirmPassword") as string;
const returnUrl = formData.get("returnUrl") as string | undefined;
if (!email || !email.includes('@')) {
return { message: "Please enter a valid email address" };
}
if (!password || password.length < 6) {
return { message: "Password must be at least 6 characters" };
}
if (password !== confirmPassword) {
return { message: "Passwords do not match" };
}
const supabase = await createClient();
const { error } = await supabase.auth.signUp({
email,
password,
options: {
emailRedirectTo: `${origin}/auth/callback?returnUrl=${returnUrl}`,
},
});
if (error) {
return { message: error.message || "Could not create account" };
}
// Try to sign in immediately
const { error: signInError } = await supabase.auth.signInWithPassword({
email,
password
});
if (signInError) {
return { message: "Account created! Check your email to confirm your registration." };
}
return redirect(returnUrl || "/dashboard");
}
export async function forgotPassword(prevState: any, formData: FormData) {
const email = formData.get("email") as string;
const origin = formData.get("origin") as string;
if (!email || !email.includes('@')) {
return { message: "Please enter a valid email address" };
}
const supabase = await createClient();
const { error } = await supabase.auth.resetPasswordForEmail(email, {
redirectTo: `${origin}/auth/reset-password`,
});
if (error) {
return { message: error.message || "Could not send password reset email" };
}
return {
success: true,
message: "Check your email for a password reset link"
};
}
export async function resetPassword(prevState: any, formData: FormData) {
const password = formData.get("password") as string;
const confirmPassword = formData.get("confirmPassword") as string;
if (!password || password.length < 6) {
return { message: "Password must be at least 6 characters" };
}
if (password !== confirmPassword) {
return { message: "Passwords do not match" };
}
const supabase = await createClient();
const { error } = await supabase.auth.updateUser({
password
});
if (error) {
return { message: error.message || "Could not update password" };
}
return {
success: true,
message: "Password updated successfully"
};
}
export async function signOut() {
const supabase = await createClient();
const { error } = await supabase.auth.signOut();
if (error) {
return { message: error.message || "Could not sign out" };
}
return redirect("/");
} |