frontend/pages/auth/login.tsx (view raw)
1import CardMedia from '@mui/material/CardMedia';
2import Card from '@mui/material/Card';
3import Typography from '@mui/material/Typography';
4import { useTheme } from '@mui/material/styles';
5import {getSession} from 'next-auth/react';
6import {useTranslation} from 'react-i18next';
7import Layout from '../../layouts/Centered';
8import Logo from '../../components/Logo';
9import SignInForm from '../../containers/SignInForm';
10import LanguagesIcon from '../../containers/Languages/Icon';
11import pageUtils from '../../lib/pageUtils';
12
13interface PageProps {
14 error?: string;
15 emailConfirmation?: boolean;
16}
17
18const Login = (props: PageProps) => {
19 const {emailConfirmation} = props;
20 const theme = useTheme();
21 const {t} = useTranslation();
22
23 return (
24 <Layout menuTitle={t('signin.title')} displayMenu={false}>
25 <Card>
26 <CardMedia component={Logo} />
27 {emailConfirmation && (
28 <Typography
29 sx={{marginBottom: theme.spacing(2)}}
30 variant="body2"
31 align="center"
32 >{t`signin.emailConfirmation`}</Typography>
33 )}
34 <SignInForm error={props?.error} />
35 </Card>
36 <LanguagesIcon />
37 </Layout>
38 );
39};
40
41export const getServerSideProps = async (context: any) => {
42 const session = await getSession(context);
43
44 if (session)
45 return {
46 redirect: {
47 destination: '/',
48 permanent: false,
49 },
50 };
51 else
52 return pageUtils.getServerSideProps(async ctx => {
53 const error = ctx.query?.error || null;
54 const emailConfirmation = ctx.query?.confirmed === 'true';
55 return {props: {error, emailConfirmation}};
56 })(context);
57};
58
59export default Login;