MIF_E31221222/sigap-website-v2/app/(auth-pages)/_actions/sign-in.ts

55 lines
1.4 KiB
TypeScript

"use server";
import { createClient } from "@/utils/supabase/server";
import { encodedRedirect } from "@/utils/utils";
import { redirect } from "next/navigation";
import { checkSession } from "./session";
export const signInAction = async (formData: FormData) => {
const supabase = await createClient();
const email = formData.get("email") as string;
const encodeEmail = encodeURIComponent(email);
try {
// First, check for existing session
const { session, error: sessionError } = await checkSession();
// If there's an active session and the email matches
if (session && session.user.email === email) {
return {
success: true,
message: "Already logged in",
redirectTo: "/protected/dashboard", // or wherever you want to redirect logged in users
};
}
// If no active session or different email, proceed with OTP
const { data, error } = await supabase.auth.signInWithOtp({
email,
options: {
shouldCreateUser: false,
},
});
if (error) {
return {
success: false,
error: error.message,
redirectTo: `/verify-otp?email=${encodeEmail}`,
};
}
return {
success: true,
message: "OTP has been sent to your email",
redirectTo: `/verify-otp?email=${encodeEmail}`,
};
} catch (error) {
return {
success: false,
error: "An unexpected error occurred",
redirectTo: "/sign-in",
};
}
};