diff --git a/frontend-next/src/app/api/login/route.js b/frontend-next/src/app/api/login/route.js index e0c9366..27742ea 100644 --- a/frontend-next/src/app/api/login/route.js +++ b/frontend-next/src/app/api/login/route.js @@ -4,8 +4,9 @@ import { NextResponse } from "next/server"; import { auth } from "firebase-admin"; import { signInWithEmailAndPassword } from "firebase/auth"; // Lib Imports -import { auth as authConfig } from "../firebase-config"; +import { app, auth as authConfig } from "../firebase-config"; import { customInitApp } from "../firebase-admin"; +import { getDatabase, ref, get as firebaseGet } from "firebase/database"; // Needs to "init" on each call to the API customInitApp(); @@ -16,9 +17,32 @@ async function handleEmailAndPassword(email, password) { var userCredential = await signInWithEmailAndPassword(authConfig,email,password); if (userCredential.user.accessToken) { var token = await auth().verifyIdToken(userCredential.user.accessToken); + var expiresIn = 20 * 60 * 1000; // 20 minutes + var sessionCookie = await auth().createSessionCookie(userCredential.user.accessToken, {expiresIn,}); if (token) { - var expiresIn = 20 * 60 * 1000; // 20 minutes - var sessionCookie = await auth().createSessionCookie(userCredential.user.accessToken, {expiresIn,}); + var database = getDatabase(app) + var user = await firebaseGet(ref(database, `users/${userCredential.user.uid}`)); + if (!user.exists()) { + var userOptions = { + name: "user", + value: JSON.stringify({defined: false, uid: userCredential.user.uid}), + maxAge: expiresIn, // 20 mins + httpOnly: true, + secure: true, + }; + } else { + var userData = user.val() + userData.uid = userCredential.user.uid + userData.defined = true + var userOptions = { + name: "user", + value: JSON.stringify(userData), + maxAge: expiresIn, // 20 mins + httpOnly: true, + secure: true, + }; + } + cookies().set(userOptions); var options = { name: "session", value: sessionCookie, @@ -27,14 +51,13 @@ async function handleEmailAndPassword(email, password) { secure: true, }; cookies().set(options); - var uid_options = { + cookies().set({ name: "uid", value: userCredential.user.uid, maxAge: expiresIn, // 20 mins httpOnly: true, secure: true, - }; - cookies().set(uid_options); + }); return NextResponse.json({ options }, { status: 200 }); } } diff --git a/frontend-next/src/app/api/signout/route.js b/frontend-next/src/app/api/signout/route.js index e476c1e..e33509a 100644 --- a/frontend-next/src/app/api/signout/route.js +++ b/frontend-next/src/app/api/signout/route.js @@ -3,15 +3,8 @@ import { NextResponse } from "next/server"; export async function GET(req) { - cookies().set({ - name: "session", - value: "", - maxAge: -1, - }); - cookies().set({ - name: "firstName", - value: "", - maxAge: -1, - }); + cookies().delete('user') + cookies().delete('session') + cookies().delete('uid') return NextResponse.json({}, { status: 200 }); } \ No newline at end of file diff --git a/frontend-next/src/app/api/user/route.js b/frontend-next/src/app/api/user/route.js index d521841..1efb9e2 100644 --- a/frontend-next/src/app/api/user/route.js +++ b/frontend-next/src/app/api/user/route.js @@ -1,37 +1,7 @@ import { NextResponse } from "next/server"; import { cookies } from "next/headers"; -import { app } from "../firebase-config"; -import { getDatabase, ref, get as firebaseGet } from "firebase/database"; - -export async function POST(req,res) { - var uid = await req?.json() - var database = getDatabase(app) - var user = await firebaseGet(ref(database, `users/${uid}`)); - if (!user.exists()) { - return NextResponse.json({ - firstName: "not-found", - lastName: "not-found", - uid: "not-found", - }); - } else { - cookies().set("firstName",user.val()?.firstName) - cookies().set("lastName",user.val()?.lastName) - cookies().set("uid",uid) - return NextResponse.json({ - firstName: user.val()?.firstName, - lastName: user.val()?.lastName, - uid: uid, - }) - } - } export async function GET(req) { - var uid = cookies().get("uid")?.value - var database = getDatabase(app) - var user = await firebaseGet(ref(database, `users/${uid}`)); - return NextResponse.json({ - firstName: user.val()?.firstName, - lastName: user.val()?.lastName, - uid: cookies().get("uid")?.value, - }) + var userData = cookies().get("user")?.value || false + return userData != false? NextResponse.json(JSON.parse(userData)): NextResponse.json({},{status: 203}) } \ No newline at end of file diff --git a/frontend-next/src/app/app/shared.js b/frontend-next/src/app/app/shared.js index 4fd6826..d9021ae 100644 --- a/frontend-next/src/app/app/shared.js +++ b/frontend-next/src/app/app/shared.js @@ -1,7 +1,7 @@ export function Header() { return (
) } diff --git a/frontend-next/src/app/login/page.js b/frontend-next/src/app/login/page.js index 662b559..52637ce 100644 --- a/frontend-next/src/app/login/page.js +++ b/frontend-next/src/app/login/page.js @@ -6,7 +6,7 @@ import "../globals.css" function Login() { var router = useRouter(); //var { register, handleSubmit } = useForm(); - var { register, control, setError, formState: { errors } } = useForm() + var { register, control, setError, formState: { errors, isSubmitting, isSubmitted } } = useForm() return (