Files
DetnalCare/lib/auth-session/auth-actions.ts
Iliyan Angelov 39077550ef Dental Care
2025-11-16 14:29:51 +02:00

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,
};
}
}