mirror of
https://github.com/Sonny93/my-links.git
synced 2025-12-08 22:53:25 +00:00
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import ButtonLink from "components/ButtonLink";
|
|
import LangSelector from "components/LangSelector";
|
|
import MessageManager from "components/MessageManager/MessageManager";
|
|
import PageTransition from "components/PageTransition";
|
|
import PATHS from "constants/paths";
|
|
import { getServerSideTranslation } from "../i18n";
|
|
import getUser from "lib/user/getUser";
|
|
import { Provider } from "next-auth/providers";
|
|
import { getProviders, signIn } from "next-auth/react";
|
|
import { useTranslation } from "next-i18next";
|
|
import { NextSeo } from "next-seo";
|
|
import Image from "next/image";
|
|
import { FcGoogle } from "react-icons/fc";
|
|
import styles from "styles/login.module.scss";
|
|
import { getSession } from "utils/session";
|
|
|
|
interface SignInProps {
|
|
providers: Provider[];
|
|
}
|
|
|
|
export default function SignIn({ providers }: SignInProps) {
|
|
const { t } = useTranslation("login");
|
|
|
|
return (
|
|
<div className={styles["login-page"]}>
|
|
<PageTransition className={styles["login-container"]} hideLangageSelector>
|
|
<NextSeo title={t("login:title")} />
|
|
<div className={styles["image-wrapper"]}>
|
|
<Image
|
|
src={"/logo-light.png"}
|
|
width={300}
|
|
height={100}
|
|
alt="MyLinks's logo"
|
|
/>
|
|
</div>
|
|
<div className={styles["form-wrapper"]}>
|
|
<h1>{t("login:title")}</h1>
|
|
<MessageManager info={t("login:informative-text")} />
|
|
{Object.values(providers).map(({ name, id }) => (
|
|
<ButtonLink
|
|
onClick={() => signIn(id, { callbackUrl: PATHS.HOME })}
|
|
className={styles["login-button"]}
|
|
key={id}
|
|
>
|
|
<FcGoogle size={"1.5em"} />{" "}
|
|
{t("login:continue-with", { provider: name } as undefined)}
|
|
</ButtonLink>
|
|
))}
|
|
</div>
|
|
</PageTransition>
|
|
<div className="lang-selector">
|
|
<LangSelector />
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export async function getServerSideProps({ req, res, locale }) {
|
|
const session = await getSession(req, res);
|
|
const user = await getUser(session);
|
|
if (user) {
|
|
return {
|
|
redirect: {
|
|
destination: PATHS.HOME,
|
|
},
|
|
};
|
|
}
|
|
|
|
const providers = await getProviders();
|
|
return {
|
|
props: {
|
|
session,
|
|
providers,
|
|
...(await getServerSideTranslation(locale, ["login"])),
|
|
},
|
|
};
|
|
}
|