Skip to content

Commit 7a784c1

Browse files
finishing auth middleware
1 parent 3493866 commit 7a784c1

3 files changed

Lines changed: 26 additions & 18 deletions

File tree

src/app/api/authenticate/route.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { NextRequest, NextResponse } from 'next/server';
2+
3+
export async function GET(request: NextRequest) {
4+
// Middleware handles auth, if it succeeds return 200
5+
console.log('GET /api/authenticate');
6+
console.log(request.headers.get('uid'));
7+
return NextResponse.json({ success: true });
8+
}

src/contexts/AuthContext.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,26 +89,26 @@ export const AuthProvider = ({ children }: { children: ReactNode }) => {
8989

9090
try {
9191
const token = await currentUser.getIdToken();
92-
const firebaseResponse = await fetch('/api/login', {
92+
// Validate firebase token
93+
const firebaseMiddlewareResponse = await fetch('/api/login', {
9394
headers: {
9495
Authorization: `Bearer ${token}`,
9596
}
9697
});
97-
98-
if (!firebaseResponse.ok) {
99-
throw new Error(await firebaseResponse.text());
98+
if (!firebaseMiddlewareResponse.ok) {
99+
throw new Error(await firebaseMiddlewareResponse.text());
100100
}
101101

102-
const authenticateResponse = await fetch('/api/authenticate');
103-
104-
if (!authenticateResponse.ok) {
105-
throw new Error(await authenticateResponse.text());
102+
// Ensure user is in the database
103+
const userResponse = await fetch('/api/authenticate');
104+
if (!userResponse.ok) {
105+
throw new Error(await userResponse.text());
106106
}
107107

108108
setUser(currentUser);
109109
} catch (error) {
110110
// TODO: Add toast to tell user there is an error
111-
setError((error as Error).message);
111+
setError(JSON.parse((error as Error).message).message);
112112
setUser(null);
113113
} finally {
114114
setLoading(false);

src/middleware.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ export async function middleware(request: NextRequest) {
2727
const uid = decodedToken.uid;
2828

2929
// TODO: Check if user is in the database
30-
// if (true) {
31-
// const response = NextResponse.json({ error: 'You must be part of Cornell AppDev to use this app' }, { status: 401 });
32-
// response.cookies.set(process.env.AUTH_COOKIE_NAME!, '', {
33-
// expires: new Date(0),
34-
// });
35-
// return response;
36-
// }
30+
if (!decodedToken.email?.endsWith('@cornell.edu')) {
31+
const response = NextResponse.json({ message: 'Only Cornell AppDev members can use this app' }, { status: 401 });
32+
response.cookies.set(process.env.AUTH_COOKIE_NAME!, '', {
33+
expires: new Date(0),
34+
});
35+
return response;
36+
}
3737

3838
const forwardedHeaders = new Headers(headers);
3939
forwardedHeaders.set('uid', uid);
@@ -53,10 +53,10 @@ export async function middleware(request: NextRequest) {
5353
}
5454
});
5555
}
56-
return NextResponse.json({ error: `${message} - please login again` }, { status: 401 });
56+
return NextResponse.json({ sucess: false, message: `${message} - please login again` }, { status: 401 });
5757
},
5858
handleError: async (error) => {
59-
return NextResponse.json({ error: (error as Error).message }, { status: 500 });
59+
return NextResponse.json({ success:false, message: (error as Error).message }, { status: 500 });
6060
}
6161
});
6262
}

0 commit comments

Comments
 (0)