import React, { useState } 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 axiosapi from '../../api/axiosapi'; function Copyright(props) { return ( {'Copyright © '} Your Website {' '} {new Date().getFullYear()} {'.'} ); } const defaultTheme = createTheme(); export default function SignInSide() { const Navigate = useNavigate(); 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('/testAuth'); }).catch(err => { console.log('Login failed'); // Handle login failure console.log(err) }); } const responseGoogle = async (response) => { // Handle Google login response let googleResponse = await axiosapi.googleLogin(response.access_token); console.log('Google Response:\n', googleResponse); if (googleResponse.status === 200) { // Store Google login tokens and set the authorization header on success localStorage.setItem('access_token', googleResponse.data.access_token); localStorage.setItem('refresh_token', googleResponse.data.refresh_token); axiosapi.axiosInstance.defaults.headers['Authorization'] = "Bearer " + googleResponse.data.access_token; Navigate('/testAuth'); } } const googleLoginImplicit = useGoogleLogin({ // flow: 'auth-code', onSuccess: async (response) => { console.log(response); try { const loginResponse = await axiosapi.googleLogin(response.access_token); 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); } } 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"} ); }