-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
login.tsx
52 lines (41 loc) · 1.31 KB
/
login.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import type {
ActionFunction,
LoaderFunctionArgs,
MetaFunction,
} from '@remix-run/node';
import {json} from '@remix-run/node';
import {AuthorizationError} from 'remix-auth';
import {jsonWithError} from 'remix-toast';
import i18next from '~/i18next.server';
import LoginPage from '~/pages/Auth/LoginPage';
import {authenticator, requireNotAuthenticated} from '~/sessions.server/auth';
import {tryCatch} from '~/utils/function';
export const action: ActionFunction = async ({request}) => {
const [error] = await tryCatch(async () =>
authenticator.authenticate('email-password', request, {
successRedirect: '/profile',
})
);
if (error) {
if (error instanceof Response) {
// authenticator throws a 302 Response on success
throw error;
}
if (error instanceof AuthorizationError) {
return {error: 'invalidCredentials'};
}
return jsonWithError({result: null}, error.message);
}
return null;
};
export const loader = async ({request}: LoaderFunctionArgs) => {
await requireNotAuthenticated(request);
const t = await i18next.getFixedT(request, 'auth');
const title = t('login');
return json({title});
};
export const meta: MetaFunction<typeof loader> = ({data}) => [
{title: data?.title},
];
const LoginRoute = () => <LoginPage />;
export default LoginRoute;