From 245ae616b1db33b65f72cfe5b633d2fe26721ae5 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 20 Feb 2024 17:05:01 -0500 Subject: [PATCH 1/5] Testing fixes with cookie on middleware --- frontend-next/src/middleware.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend-next/src/middleware.js b/frontend-next/src/middleware.js index abef4f5..6642499 100644 --- a/frontend-next/src/middleware.js +++ b/frontend-next/src/middleware.js @@ -15,13 +15,17 @@ export async function middleware(req, res) { Cookie: `session=${session?.value}`, }, }); + // Login if unauthorized if (responseAPI.status !== 200) { + console.log("redirecting to login - second") return NextResponse.redirect(new URL("/login", req.url)); } + // If new user, redirect to onboarding var { uid } = await responseAPI.json() - var firstName = await req.cookies.get("firstName")?.value; + var firstName = req.cookies.get("firstName")?.value; + console.log(firstName) if (firstName) { return NextResponse.next(); } else { -- 2.52.0 From 66c9de922d734343adf5cac49108d28faf5d77d9 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 20 Feb 2024 17:27:01 -0500 Subject: [PATCH 2/5] New way of setting cookies --- frontend-next/src/middleware.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend-next/src/middleware.js b/frontend-next/src/middleware.js index 6642499..c25c50e 100644 --- a/frontend-next/src/middleware.js +++ b/frontend-next/src/middleware.js @@ -1,5 +1,6 @@ // src/middleware.js import { NextResponse } from "next/server"; +import { cookies } from "next/headers"; import { app } from "./app/api/firebase-config"; import { getDatabase, ref, get as firebaseGet } from "firebase/database"; @@ -35,9 +36,9 @@ export async function middleware(req, res) { return NextResponse.redirect(new URL("/onboarding", req.url)); } else { var returnedResponse = NextResponse.next(); - returnedResponse.cookies.set("firstName",user.val()?.firstName) - returnedResponse.cookies.set("lastName",user.val()?.lastName) - returnedResponse.cookies.set("uid",uid) + cookies().set("firstName",user.val()?.firstName) + cookies().set("lastName",user.val()?.lastName) + cookies().set("uid",uid) return returnedResponse } } -- 2.52.0 From 4391a072cce72dbc91773d9879581d587f2e30d8 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 20 Feb 2024 17:33:06 -0500 Subject: [PATCH 3/5] Different way of setting cookies --- frontend-next/src/middleware.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend-next/src/middleware.js b/frontend-next/src/middleware.js index c25c50e..cf5fff6 100644 --- a/frontend-next/src/middleware.js +++ b/frontend-next/src/middleware.js @@ -35,11 +35,11 @@ export async function middleware(req, res) { if (!user.exists()) { return NextResponse.redirect(new URL("/onboarding", req.url)); } else { - var returnedResponse = NextResponse.next(); + //var returnedResponse = NextResponse.next(); cookies().set("firstName",user.val()?.firstName) cookies().set("lastName",user.val()?.lastName) cookies().set("uid",uid) - return returnedResponse + return NextResponse.next() } } } -- 2.52.0 From b07a33345979f61eabe1c4f13816b72738a58db9 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 20 Feb 2024 22:51:09 -0500 Subject: [PATCH 4/5] Cookie Deployment Fix --- frontend-next/src/app/api/login/route.js | 9 +++++ frontend-next/src/app/api/onboard/route.js | 1 - frontend-next/src/app/api/user/route.js | 44 ++++++++++++++++------ frontend-next/src/app/app/page.js | 1 - frontend-next/src/middleware.js | 24 ++++-------- 5 files changed, 49 insertions(+), 30 deletions(-) diff --git a/frontend-next/src/app/api/login/route.js b/frontend-next/src/app/api/login/route.js index 0994af3..506d826 100644 --- a/frontend-next/src/app/api/login/route.js +++ b/frontend-next/src/app/api/login/route.js @@ -19,6 +19,7 @@ async function handleEmailAndPassword(email, password) { if (token) { var expiresIn = 20 * 60 * 1000; // 20 minutes var sessionCookie = await auth().createSessionCookie(userCredential.user.accessToken, {expiresIn,}); + console.log(userCredential.user.uid) var options = { name: "session", value: sessionCookie, @@ -27,6 +28,14 @@ async function handleEmailAndPassword(email, password) { secure: true, }; cookies().set(options); + var uid_options = { + 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/onboard/route.js b/frontend-next/src/app/api/onboard/route.js index a4eab8f..4c177a8 100644 --- a/frontend-next/src/app/api/onboard/route.js +++ b/frontend-next/src/app/api/onboard/route.js @@ -34,7 +34,6 @@ export async function POST(req, res) { var { firstName, lastName } = await req?.json() return await onboard(firstName, lastName, req); } catch (error) { - console.log(error) return NextResponse.json({ error: "Internal Server Error" },{ status: 500 }); } } \ 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 d2f9aa6..d521841 100644 --- a/frontend-next/src/app/api/user/route.js +++ b/frontend-next/src/app/api/user/route.js @@ -1,15 +1,37 @@ 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) { - const session = cookies().get("session"); - // Login if not logged in - if (session) { - return NextResponse.json({ - firstName: cookies().get("firstName")?.value, - lastName: cookies().get("lastName")?.value, - uid: cookies().get("uid")?.value, - }) - } - return NextResponse.json({}, { status: 500 }); - } \ No newline at end of file + 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, + }) +} \ No newline at end of file diff --git a/frontend-next/src/app/app/page.js b/frontend-next/src/app/app/page.js index e7805e9..5335e92 100644 --- a/frontend-next/src/app/app/page.js +++ b/frontend-next/src/app/app/page.js @@ -38,7 +38,6 @@ function Geo() { // Retrieve latitude & longitude coordinates from `navigator.geolocation` Web API navigator.geolocation.getCurrentPosition(({ coords }) => { const { latitude, longitude } = coords; - console.log(latitude, longitude) setData(coords) setLoading(false) }) diff --git a/frontend-next/src/middleware.js b/frontend-next/src/middleware.js index cf5fff6..ec53106 100644 --- a/frontend-next/src/middleware.js +++ b/frontend-next/src/middleware.js @@ -1,8 +1,6 @@ // src/middleware.js import { NextResponse } from "next/server"; import { cookies } from "next/headers"; -import { app } from "./app/api/firebase-config"; -import { getDatabase, ref, get as firebaseGet } from "firebase/database"; export async function middleware(req, res) { const session = req.cookies.get("session"); @@ -19,28 +17,20 @@ export async function middleware(req, res) { // Login if unauthorized if (responseAPI.status !== 200) { - console.log("redirecting to login - second") return NextResponse.redirect(new URL("/login", req.url)); } // If new user, redirect to onboarding var { uid } = await responseAPI.json() - var firstName = req.cookies.get("firstName")?.value; - console.log(firstName) - if (firstName) { + 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") { return NextResponse.next(); } else { - var database = getDatabase(app) - var user = await firebaseGet(ref(database, `users/${uid}`)); - if (!user.exists()) { - return NextResponse.redirect(new URL("/onboarding", req.url)); - } else { - //var returnedResponse = NextResponse.next(); - cookies().set("firstName",user.val()?.firstName) - cookies().set("lastName",user.val()?.lastName) - cookies().set("uid",uid) - return NextResponse.next() - } + return NextResponse.redirect(new URL("/onboarding", req.url)); } } -- 2.52.0 From b24a2b525484830bf39e4784f6515e3e384203ba Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 20 Feb 2024 22:55:20 -0500 Subject: [PATCH 5/5] Remove Logging --- frontend-next/src/app/api/login/route.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend-next/src/app/api/login/route.js b/frontend-next/src/app/api/login/route.js index 506d826..e0c9366 100644 --- a/frontend-next/src/app/api/login/route.js +++ b/frontend-next/src/app/api/login/route.js @@ -19,7 +19,6 @@ async function handleEmailAndPassword(email, password) { if (token) { var expiresIn = 20 * 60 * 1000; // 20 minutes var sessionCookie = await auth().createSessionCookie(userCredential.user.accessToken, {expiresIn,}); - console.log(userCredential.user.uid) var options = { name: "session", value: sessionCookie, -- 2.52.0