diff --git a/frontend-next/src/app/api/login/route.js b/frontend-next/src/app/api/login/route.js index e0c9366..aa66674 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,31 @@ 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({firstName: 'DNE', uid: userCredential.user.uid}), + maxAge: expiresIn, // 20 mins + httpOnly: true, + secure: true, + }; + } else { + var userData = user.val() + userData.uid = userCredential.user.uid + 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 +50,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..a81a852 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 + return NextResponse.json(JSON.parse(userData)) } \ No newline at end of file diff --git a/frontend-next/src/middleware.js b/frontend-next/src/middleware.js index ec53106..d8fa4d0 100644 --- a/frontend-next/src/middleware.js +++ b/frontend-next/src/middleware.js @@ -21,13 +21,8 @@ export async function middleware(req, res) { } // If new user, redirect to onboarding - var { uid } = await responseAPI.json() - var user = await fetch(new URL("/api/user", req.url), { - method: "POST", - body: JSON.stringify(uid ? uid : {}), - }); - user = await user.json(); - if (user.firstName !== "not-found") { + var user = JSON.parse(req.cookies.get("user").value) + if (user.firstName !== "DNE") { return NextResponse.next(); } else { return NextResponse.redirect(new URL("/onboarding", req.url));