41 lines
1.0 KiB
TypeScript
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();
|
|
};
|