99 lines
2.3 KiB
TypeScript
99 lines
2.3 KiB
TypeScript
'use server';
|
|
|
|
import { createServerClient } from '@/lib/supabase/server';
|
|
import { revalidatePath } from 'next/cache';
|
|
import { redirect } from 'next/navigation';
|
|
|
|
/**
|
|
* Sign out the current user
|
|
*/
|
|
export async function logout() {
|
|
const supabase = await createServerClient();
|
|
await supabase.auth.signOut();
|
|
revalidatePath('/', 'layout');
|
|
redirect('/');
|
|
}
|
|
|
|
/**
|
|
* Sign in with email and password
|
|
*/
|
|
export async function signInWithPassword(formData: FormData) {
|
|
const email = formData.get('email') as string;
|
|
const password = formData.get('password') as string;
|
|
|
|
const supabase = await createServerClient();
|
|
const { error } = await supabase.auth.signInWithPassword({
|
|
email,
|
|
password,
|
|
});
|
|
|
|
if (error) {
|
|
return { error: error.message };
|
|
}
|
|
|
|
revalidatePath('/', 'layout');
|
|
redirect('/dashboard');
|
|
}
|
|
|
|
/**
|
|
* Sign up with email and password
|
|
*/
|
|
export async function signUpWithPassword(formData: FormData) {
|
|
const email = formData.get('email') as string;
|
|
const password = formData.get('password') as string;
|
|
|
|
const supabase = await createServerClient();
|
|
const { error } = await supabase.auth.signUp({
|
|
email,
|
|
password,
|
|
options: {
|
|
emailRedirectTo: `${process.env.NEXT_PUBLIC_SITE_URL}/auth/callback`,
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
return { error: error.message };
|
|
}
|
|
|
|
return { success: 'Check your email to confirm your account' };
|
|
}
|
|
|
|
/**
|
|
* Send magic link for passwordless login
|
|
*/
|
|
export async function signInWithMagicLink(formData: FormData) {
|
|
const email = formData.get('email') as string;
|
|
|
|
const supabase = await createServerClient();
|
|
const { error } = await supabase.auth.signInWithOtp({
|
|
email,
|
|
options: {
|
|
emailRedirectTo: `${process.env.NEXT_PUBLIC_SITE_URL}/auth/callback`,
|
|
},
|
|
});
|
|
|
|
if (error) {
|
|
return { error: error.message };
|
|
}
|
|
|
|
return { success: 'Check your email for the magic link' };
|
|
}
|
|
|
|
/**
|
|
* Request password reset
|
|
*/
|
|
export async function resetPassword(formData: FormData) {
|
|
const email = formData.get('email') as string;
|
|
|
|
const supabase = await createServerClient();
|
|
const { error } = await supabase.auth.resetPasswordForEmail(email, {
|
|
redirectTo: `${process.env.NEXT_PUBLIC_SITE_URL}/auth/reset-password`,
|
|
});
|
|
|
|
if (error) {
|
|
return { error: error.message };
|
|
}
|
|
|
|
return { success: 'Check your email for the password reset link' };
|
|
}
|