Vercel/src/auth/actions.ts
2024-01-16 22:20:52 -06:00

41 lines
1.0 KiB
TypeScript

'use server';
import {
KEY_CALLBACK_URL,
KEY_CREDENTIALS_SIGN_IN_ERROR,
KEY_CREDENTIALS_SIGN_IN_ERROR_URL,
signIn,
signOut,
} from '@/auth';
import { PATH_ADMIN_PHOTOS } from '@/site/paths';
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)
) {
// 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 signOutAction = async () => {
await signOut();
};