Vercel/src/auth/actions.ts
2025-02-11 18:06:15 -06:00

53 lines
1.6 KiB
TypeScript

'use server';
import {
KEY_CALLBACK_URL,
KEY_CREDENTIALS_CALLBACK_ROUTE_ERROR_URL,
KEY_CREDENTIALS_SIGN_IN_ERROR,
KEY_CREDENTIALS_SIGN_IN_ERROR_URL,
auth,
generateAuthSecret,
signIn,
signOut,
} from '@/auth';
import { PATH_ADMIN_PHOTOS, PATH_ROOT } from '@/app-core/paths';
import type { Session } from 'next-auth';
import { redirect } from 'next/navigation';
export const signInAction = async (
_prevState: string | undefined,
formData: FormData,
) => {
try {
await signIn('credentials', Object.fromEntries(formData));
} catch (error) {
if (
`${error}`.includes(KEY_CREDENTIALS_SIGN_IN_ERROR) ||
`${error}`.includes(KEY_CREDENTIALS_SIGN_IN_ERROR_URL) ||
// New error thrown in next-auth 5.0.0-beta.19 for incorrect credentials
`${error}`.includes(KEY_CREDENTIALS_CALLBACK_ROUTE_ERROR_URL)
) {
// Return credentials error to display on sign-in page.
return KEY_CREDENTIALS_SIGN_IN_ERROR;
} else if (!`${error}`.includes('NEXT_REDIRECT')) {
console.log('Unknown sign in error:', {
errorText: `${error}`,
error,
});
// Rethrow non-redirect errors
throw error;
}
}
redirect(formData.get(KEY_CALLBACK_URL) as string || PATH_ADMIN_PHOTOS);
};
export const signOutAndRedirectAction = async () =>
signOut({ redirectTo: PATH_ROOT });
export const getAuthAction = async () => auth();
export const logClientAuthUpdate = async (data: Session | null | undefined) =>
console.log('Client auth update', data);
export const generateAuthSecretAction = async () => generateAuthSecret();