diff --git a/app/loginPage/page.tsx b/app/loginPage/page.tsx new file mode 100644 index 0000000..cdc66b2 --- /dev/null +++ b/app/loginPage/page.tsx @@ -0,0 +1,82 @@ +"use client"; +import { useEffect, useState } from "react"; +import { GoogleOAuthProvider, useGoogleLogin, googleLogout, TokenResponse} from "@react-oauth/google"; +import { jwtDecode } from "jwt-decode"; +import axios from "axios"; + +interface User { + name: string; + email: string; + picture: string; +} +const LoginPage = () => { + return( + + + + ) +} + +const LoginComponent = () => { + const [user, setUser] = useState(null); + + + + useEffect(() => { + console.log("LoginPage component mounted"); + }, []); + + const handleLoginSuccess = (tokenResponse: any) => { + if ('code' in tokenResponse) { + // Handle authorization code flow + console.log('Authorization Code:', tokenResponse.code); + // Exchange code for tokens here + } else { + // Handle implicit flow + console.log('Token Received:', tokenResponse.access_token); + const decoded: User = jwtDecode(tokenResponse.id_token); + setUser({ + name: decoded.name, + email: decoded.email, + picture: decoded.picture + }); + // Send token to backend if necessary + axios.post('http://localhost:8000/myapi/users/google-oauth2/', { token: tokenResponse.access_token }) + .then(res => console.log('Backend login successful', res)) + .catch(err => console.error('Backend login failed', err)); + } + + }; + const login = useGoogleLogin({ + flow: "auth-code", + + onSuccess: (tokenResponse) => handleLoginSuccess, + onError: (errorResponse) => console.error('Login Failed', errorResponse), + }); + const handleLogout = () => { + googleLogout(); + setUser(null); // Clears the user state, effectively logging out the user + console.log('Logged out successfully'); + }; + return ( +
+ + {user && ( +
+ User profile +

Welcome, {user.name} - {user.email}

+ +
+ )} + +
+ + ); +}; + +export default LoginPage; + diff --git a/app/page.tsx b/app/page.tsx index ee57510..c675f1c 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -14,6 +14,7 @@ interface Food { extra_data: Array; } + interface subCategory { name: string; foods: Array;