111 lines
2.4 KiB
TypeScript
111 lines
2.4 KiB
TypeScript
"use server";
|
|
|
|
import { auth } from "@/lib/auth-session/auth";
|
|
import { headers } from "next/headers";
|
|
import { redirect } from "next/navigation";
|
|
|
|
/**
|
|
* Server Actions for Authentication
|
|
*
|
|
* Best practices:
|
|
* - Use "use server" directive
|
|
* - Return consistent response shapes
|
|
* - Handle errors gracefully
|
|
* - Use Better Auth's API methods
|
|
*
|
|
* Note: Prefer using authClient on the client side when possible
|
|
* These are mainly for server-side flows or progressive enhancement
|
|
*/
|
|
|
|
/**
|
|
* Sign in with email and password
|
|
* @param email - User's email
|
|
* @param password - User's password
|
|
*/
|
|
export async function signInWithEmail(email: string, password: string) {
|
|
try {
|
|
await auth.api.signInEmail({
|
|
body: { email, password },
|
|
headers: await headers(),
|
|
});
|
|
|
|
return { success: true as const };
|
|
} catch (error) {
|
|
console.error("[signInWithEmail] Error:", error);
|
|
return {
|
|
success: false as const,
|
|
error: error instanceof Error ? error.message : "Sign in failed",
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sign up with email and password
|
|
* @param email - User's email
|
|
* @param password - User's password
|
|
* @param name - User's name
|
|
*/
|
|
export async function signUpWithEmail(
|
|
email: string,
|
|
password: string,
|
|
name: string
|
|
) {
|
|
try {
|
|
await auth.api.signUpEmail({
|
|
body: { email, password, name },
|
|
headers: await headers(),
|
|
});
|
|
|
|
return { success: true as const };
|
|
} catch (error) {
|
|
console.error("[signUpWithEmail] Error:", error);
|
|
return {
|
|
success: false as const,
|
|
error: error instanceof Error ? error.message : "Sign up failed",
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sign out the current user
|
|
*/
|
|
export async function signOutAction() {
|
|
try {
|
|
await auth.api.signOut({
|
|
headers: await headers(),
|
|
});
|
|
|
|
redirect("/sign-in");
|
|
} catch (error) {
|
|
console.error("[signOutAction] Error:", error);
|
|
return {
|
|
success: false as const,
|
|
error: "Sign out failed",
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the current session
|
|
* Prefer using getSession() from auth-server.ts in Server Components
|
|
*/
|
|
export async function getCurrentSessionAction() {
|
|
try {
|
|
const session = await auth.api.getSession({
|
|
headers: await headers(),
|
|
});
|
|
|
|
return {
|
|
success: true as const,
|
|
data: session,
|
|
};
|
|
} catch (error) {
|
|
console.error("[getCurrentSessionAction] Error:", error);
|
|
return {
|
|
success: false as const,
|
|
error: "Failed to get session",
|
|
data: null,
|
|
};
|
|
}
|
|
}
|