diff --git a/src/hooks/useUser.tsx b/src/hooks/useUser.tsx index df6e9d43..47b9a36e 100644 --- a/src/hooks/useUser.tsx +++ b/src/hooks/useUser.tsx @@ -15,10 +15,10 @@ export default function useUser({redirectTo = "", redirectIfFound = false} = {}) if (!redirectTo || !user) return; if ( - // If redirectTo is set, redirect if the user was not found. - (redirectTo && !redirectIfFound && (!user || (user && !user.isVerified))) || // If redirectIfFound is also set, redirect if the user was found - (redirectIfFound && user && user.isVerified) + (redirectIfFound && user && user.isVerified) || + // If redirectTo is set, redirect if the user was not found. + (redirectTo && !redirectIfFound && (!user || (user && !user.isVerified))) ) { Router.push(redirectTo); } diff --git a/src/pages/login.tsx b/src/pages/login.tsx index 357f9f6c..2f62981e 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -2,7 +2,7 @@ import {User} from "@/interfaces/user"; import {toast, ToastContainer} from "react-toastify"; import axios from "axios"; -import {FormEvent, useState} from "react"; +import {FormEvent, useEffect, useState} from "react"; import Head from "next/head"; import useUser from "@/hooks/useUser"; import {Divider} from "primereact/divider"; @@ -13,9 +13,38 @@ import Input from "@/components/Low/Input"; import clsx from "clsx"; import {useRouter} from "next/router"; import EmailVerification from "./(auth)/EmailVerification"; +import {withIronSessionSsr} from "iron-session/next"; +import {sessionOptions} from "@/lib/session"; const EMAIL_REGEX = new RegExp(/^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$/g); +export const getServerSideProps = withIronSessionSsr(({req, res}) => { + const user = req.session.user; + + const envVariables: {[key: string]: string} = {}; + Object.keys(process.env) + .filter((x) => x.startsWith("NEXT_PUBLIC")) + .forEach((x: string) => { + envVariables[x] = process.env[x]!; + }); + + if (user && user.isVerified) { + res.setHeader("location", "/"); + res.statusCode = 302; + res.end(); + return { + props: { + user: null, + envVariables, + }, + }; + } + + return { + props: {user: null, envVariables}, + }; +}, sessionOptions); + export default function Login() { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); @@ -29,6 +58,10 @@ export default function Login() { redirectIfFound: true, }); + useEffect(() => { + if (user && user.isVerified) router.push("/"); + }, [router, user]); + const forgotPassword = () => { if (!email || email.length < 0 || !EMAIL_REGEX.test(email)) { toast.error("Please enter your e-mail to reset your password!", {toastId: "forgot-invalid-email"});