From 93c8df313fcfa70e22bb4f38adc0123ad3529a8b Mon Sep 17 00:00:00 2001 From: sosokker Date: Sun, 5 Nov 2023 15:47:02 +0700 Subject: [PATCH] Modify Login Page --- frontend/src/App.jsx | 5 +- .../authentication/AuthenticationPage.jsx | 206 ------------------ .../components/authentication/LoginPage.jsx | 143 ++++++++++++ 3 files changed, 145 insertions(+), 209 deletions(-) delete mode 100644 frontend/src/components/authentication/AuthenticationPage.jsx create mode 100644 frontend/src/components/authentication/LoginPage.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 7333c4a..c18349d 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -3,12 +3,11 @@ import { BrowserRouter, Route, Routes, Link } from 'react-router-dom'; import TestAuth from './components/testAuth'; import IconSideNav from './components/IconSideNav'; -import AuthenticantionPage from './components/authentication/AuthenticationPage'; +import LoginPage from './components/authentication/LoginPage'; import SignUpPage from './components/authentication/SignUpPage'; import NavBar from './components/Nav/Navbar'; import Home from './components/Home'; - const App = () => { return ( @@ -16,7 +15,7 @@ const App = () => { }/> - }/> + }/> }/> }/> diff --git a/frontend/src/components/authentication/AuthenticationPage.jsx b/frontend/src/components/authentication/AuthenticationPage.jsx deleted file mode 100644 index 0955342..0000000 --- a/frontend/src/components/authentication/AuthenticationPage.jsx +++ /dev/null @@ -1,206 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { useGoogleLogin } from '@react-oauth/google'; -import Avatar from '@mui/material/Avatar'; -import Button from '@mui/material/Button'; -import CssBaseline from '@mui/material/CssBaseline'; -import TextField from '@mui/material/TextField'; -import FormControlLabel from '@mui/material/FormControlLabel'; -import Checkbox from '@mui/material/Checkbox'; -import Link from '@mui/material/Link'; -import Divider from '@mui/material/Divider'; -import Paper from '@mui/material/Paper'; -import Box from '@mui/material/Box'; -import Grid from '@mui/material/Grid'; -import LockOutlinedIcon from '@mui/icons-material/LockOutlined'; -import Typography from '@mui/material/Typography'; -import { createTheme, ThemeProvider } from '@mui/material/styles'; - -import refreshAccessToken from './refreshAcesstoken'; -import axiosapi from '../../api/axiosapi'; - - -function Copyright(props) { - return ( - - {'Copyright © '} - - TurTask - {' '} - {new Date().getFullYear()} - {'.'} - - ); -} - - -const defaultTheme = createTheme(); - -export default function SignInSide() { - - const Navigate = useNavigate(); - - useEffect(() => { - if (!refreshAccessToken()) { - Navigate("/"); - } - }, []); - - const [email, setEmail] = useState(""); - const [username, setUsername] = useState(""); - const [password, setPassword] = useState(""); - - const handleUsernameChange = (event) => { - setUsername(event.target.value); - } - - const handleEmailChange = (event) => { - setEmail(event.target.value); - } - - const handlePasswordChange = (event) => { - setPassword(event.target.value); - } - - const handleSubmit = (event) => { - event.preventDefault(); - - // Send a POST request to the authentication API - axiosapi.apiUserLogin({ - email: email, - username: username, - password: password - }).then(res => { - // On successful login, store tokens and set the authorization header - localStorage.setItem('access_token', res.data.access); - localStorage.setItem('refresh_token', res.data.refresh); - axiosapi.axiosInstance.defaults.headers['Authorization'] = "Bearer " + res.data.access; - Navigate('/'); - }).catch(err => { - console.log('Login failed'); // Handle login failure - console.log(err) - }); - } - - const googleLoginImplicit = useGoogleLogin({ - flow: 'auth-code', - redirect_uri: 'postmessage', - onSuccess: async (response) => { - try { - const loginResponse = await axiosapi.googleLogin(response.code); - if (loginResponse && loginResponse.data) { - const { access_token, refresh_token } = loginResponse.data; - - // Save the tokens in localStorage - localStorage.setItem('access_token', access_token); - localStorage.setItem('refresh_token', refresh_token); - Navigate('/'); - } - } catch (error) { - console.error('Error with the POST request:', error); - } - }, - onError: errorResponse => console.log(errorResponse), - }); - - - return ( - - - - - t.palette.mode === 'light' ? t.palette.grey[50] : t.palette.grey[900], - backgroundSize: 'cover', - backgroundPosition: 'center', - }} - /> - - - - - - - Sign in - - - - - } - label="Remember me" - /> - - OR - - - - - - - Forgot password? - - - - - {"Don't have an account? Sign Up"} - - - - - - - - - - ); -} \ No newline at end of file diff --git a/frontend/src/components/authentication/LoginPage.jsx b/frontend/src/components/authentication/LoginPage.jsx new file mode 100644 index 0000000..242a9f1 --- /dev/null +++ b/frontend/src/components/authentication/LoginPage.jsx @@ -0,0 +1,143 @@ +import React, { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { useGoogleLogin } from "@react-oauth/google" + +import refreshAccessToken from './refreshAcesstoken'; +import axiosapi from '../../api/axiosapi'; + +function LoginPage() { + const Navigate = useNavigate(); + + useEffect(() => { + if (!refreshAccessToken()) { + Navigate("/"); + } + }, []); + + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + + const handleEmailChange = event => { + setEmail(event.target.value); + }; + + const handlePasswordChange = event => { + setPassword(event.target.value); + }; + + const handleSubmit = event => { + event.preventDefault(); + + // Send a POST request to the authentication API + axiosapi + .apiUserLogin({ + email: email, + password: password, + }) + .then(res => { + // On successful login, store tokens and set the authorization header + localStorage.setItem("access_token", res.data.access); + localStorage.setItem("refresh_token", res.data.refresh); + axiosapi.axiosInstance.defaults.headers["Authorization"] = "Bearer " + res.data.access; + Navigate("/"); + }) + .catch(err => { + console.log("Login failed"); + console.log(err); + }); + }; + + const googleLoginImplicit = useGoogleLogin({ + flow: "auth-code", + redirect_uri: "postmessage", + onSuccess: async response => { + try { + const loginResponse = await axiosapi.googleLogin(response.code); + if (loginResponse && loginResponse.data) { + const { access_token, refresh_token } = loginResponse.data; + + localStorage.setItem("access_token", access_token); + localStorage.setItem("refresh_token", refresh_token); + Navigate("/"); + } + } catch (error) { + console.error("Error with the POST request:", error); + } + }, + onError: errorResponse => console.log(errorResponse), + }); + + return ( + +
+ {/* Left Section (Login Box) */} +
+
+

Log in to your account

+ {/* Email Input */} +
+ + +
+ {/* Password Input */} +
+ + +
+ {/* Login Button */} + +
OR
+ {/* Login with Google Button */} + + {/* Forgot Password Link */} + +
+
+ + {/* Right Section (Blurred Image Background) */} +
+
+ +
+ Text Overlay +
+
+
+ + ); +} + +export default LoginPage;