diff --git a/web/pages/_app.js b/web/pages/_app.js
index e59127b..55c7838 100644
--- a/web/pages/_app.js
+++ b/web/pages/_app.js
@@ -1,17 +1,20 @@
+import { useState } from 'react';
import '../styles/globals.css';
import '../styles/utilities.css';
import { ChakraProvider } from '@chakra-ui/react';
import Footer from '../components/Footer';
import NavBar from '../components/Navbar';
+import { UserContext } from '../utils/UserContext';
-function MyApp({ Component, pageProps }) {
+export default function MyApp({ Component, pageProps }) {
+ const [user, setUser] = useState(null);
return (
-
-
-
-
-
+
+
+
+
+
+
+
);
}
-
-export default MyApp;
diff --git a/web/pages/signin.js b/web/pages/signin.js
index d6a7fd3..4621159 100644
--- a/web/pages/signin.js
+++ b/web/pages/signin.js
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, useEffect, useContext } from 'react';
import { useRouter } from 'next/router';
import { Formik, Form } from 'formik';
import * as Yup from 'yup';
@@ -14,6 +14,7 @@ import {
Link,
Box,
} from '@chakra-ui/react';
+import { UserContext } from '../utils/UserContext';
const initialValues = {
email: '',
@@ -26,10 +27,17 @@ const validationSchema = Yup.object().shape({
password: Yup.string().required('Required'),
});
-export default function SignIn() {
+export default function SignIn({ serverSideUser }) {
const Router = useRouter();
const [response, setResponse] = useState();
+ const { user, setUser } = useContext(UserContext);
+ // checks if there exists an already logged-in user
+ useEffect(() => {
+ if (serverSideUser) setUser(serverSideUser);
+ }, [serverSideUser]);
+
+ // on-click handler
async function onSignIn(values) {
const body = {
email: values.email,
@@ -43,10 +51,9 @@ export default function SignIn() {
body: JSON.stringify(body),
});
- res = await res.json();
- if (res.message == 'Login Success!') {
+ if (res.status === 200) {
setTimeout(() => {
- Router.push('/profile');
+ Router.reload();
}, 1000);
}
setResponse(res);
@@ -63,92 +70,105 @@ export default function SignIn() {
spacing="1rem"
color="black"
>
- Sign In
-
- {response && response.message && (
-
-
- {response.message}
-
- )}
-
- {response && response.error && (
-
-
- {response.error}
-
- )}
-
- {
- await onSignIn(values);
- actions.setSubmitting(false);
- }}
- >
- {({ errors, touched, isSubmitting, isValid }) => (
-
- )}
-
-
-
-
- Router.push('/signup')}
+ {(user && (
+ <>
+ Signed in as {user.email}
+
+ >
+ )) || (
+ <>
+ Sign In
+ {response && response.message && (
+
+
+ {response.message}
+
+ )}
+ {response && response.error && (
+
+
+ {response.error}
+
+ )}
+ {
+ await onSignIn(values);
+ actions.setSubmitting(false);
+ }}
>
- Sign Up
-
-
-
- Forgot Password
-
-
+ {({ errors, touched, isSubmitting, isValid }) => (
+
+ )}
+
+
+
+ Router.push('/signup')}
+ >
+ Sign Up
+
+
+
+ Forgot Password
+
+
+ >
+ )}
);
}
+
+export function getServerSideProps({ req }) {
+ const user = req.user;
+ if (!user) return { props: { user: null } };
+ delete user.password;
+ delete user.createTime;
+ return { props: { serverSideUser: user } };
+}
diff --git a/web/utils/UserContext.js b/web/utils/UserContext.js
new file mode 100644
index 0000000..40223ff
--- /dev/null
+++ b/web/utils/UserContext.js
@@ -0,0 +1,3 @@
+import { createContext } from 'react';
+
+export const UserContext = createContext(null);