Skip to content

Commit 6cbd4de

Browse files
committed
add middleware
1 parent 7dd1375 commit 6cbd4de

File tree

2 files changed

+68
-46
lines changed

2 files changed

+68
-46
lines changed

peerprep-fe/src/components/navbar/Navbar.tsx

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
import Avatar, { genConfig } from 'react-nice-avatar';
1414

1515
export default function Navbar() {
16-
const { isAuthenticated, logout, user } = useAuth();
16+
const { isAuthenticated, logout, user, isLoading } = useAuth();
1717

1818
// Generate avatar config based on user's username
1919
const avatarConfig = user ? genConfig(user.username) : undefined;
@@ -31,52 +31,55 @@ export default function Navbar() {
3131
<Link href="/match" className="text-gray-300 hover:text-white">
3232
Match
3333
</Link>
34-
{isAuthenticated ? (
35-
<DropdownMenu>
36-
<DropdownMenuTrigger asChild>
37-
<Button
38-
variant="ghost"
39-
size="icon"
40-
className="relative h-8 w-8 overflow-hidden rounded-full p-0"
41-
>
42-
{avatarConfig ? (
43-
<div className="h-full w-full scale-x-[-1] transform">
44-
<Avatar
45-
style={{ width: '100%', height: '100%' }}
46-
{...avatarConfig}
47-
/>
48-
</div>
49-
) : (
50-
<UserCircle className="h-6 w-6 text-gray-300" />
51-
)}
52-
<span className="sr-only">Open user menu</span>
34+
{!isLoading &&
35+
(isAuthenticated ? (
36+
<DropdownMenu>
37+
<DropdownMenuTrigger asChild>
38+
<Button
39+
variant="ghost"
40+
size="icon"
41+
className="relative h-8 w-8 overflow-hidden rounded-full p-0"
42+
>
43+
{avatarConfig ? (
44+
<div className="h-full w-full scale-x-[-1] transform">
45+
<Avatar
46+
style={{ width: '100%', height: '100%' }}
47+
{...avatarConfig}
48+
/>
49+
</div>
50+
) : (
51+
<UserCircle className="h-6 w-6 text-gray-300" />
52+
)}
53+
<span className="sr-only">Open user menu</span>
54+
</Button>
55+
</DropdownMenuTrigger>
56+
<DropdownMenuContent align="end">
57+
<DropdownMenuItem disabled>
58+
<span className="font-semibold">Hi {user?.username}</span>
59+
</DropdownMenuItem>
60+
<DropdownMenuItem asChild>
61+
<Link href="/profile" className="w-full">
62+
Profile
63+
</Link>
64+
</DropdownMenuItem>
65+
<DropdownMenuItem asChild>
66+
<Link href="/settings" className="w-full">
67+
Settings
68+
</Link>
69+
</DropdownMenuItem>
70+
<DropdownMenuItem onClick={logout}>
71+
<LogOut className="mr-2 h-4 w-4" />
72+
<span>Sign out</span>
73+
</DropdownMenuItem>
74+
</DropdownMenuContent>
75+
</DropdownMenu>
76+
) : (
77+
<Link href="/signin">
78+
<Button className="bg-blue-500 hover:bg-blue-600">
79+
Sign In
5380
</Button>
54-
</DropdownMenuTrigger>
55-
<DropdownMenuContent align="end">
56-
<DropdownMenuItem disabled>
57-
<span className="font-semibold">Hi {user?.username}</span>
58-
</DropdownMenuItem>
59-
<DropdownMenuItem asChild>
60-
<Link href="/profile" className="w-full">
61-
Profile
62-
</Link>
63-
</DropdownMenuItem>
64-
<DropdownMenuItem asChild>
65-
<Link href="/settings" className="w-full">
66-
Settings
67-
</Link>
68-
</DropdownMenuItem>
69-
<DropdownMenuItem onClick={logout}>
70-
<LogOut className="mr-2 h-4 w-4" />
71-
<span>Sign out</span>
72-
</DropdownMenuItem>
73-
</DropdownMenuContent>
74-
</DropdownMenu>
75-
) : (
76-
<Link href="/signin">
77-
<Button className="bg-blue-500 hover:bg-blue-600">Sign In</Button>
78-
</Link>
79-
)}
81+
</Link>
82+
))}
8083
</div>
8184
</div>
8285
</nav>

peerprep-fe/src/middleware.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { NextResponse } from 'next/server';
2+
import type { NextRequest } from 'next/server';
3+
4+
export function middleware(request: NextRequest) {
5+
const authToken = request.cookies.get('auth_token')?.value;
6+
const isAuthPage =
7+
request.nextUrl.pathname === '/signin' ||
8+
request.nextUrl.pathname === '/signup';
9+
10+
if (authToken && isAuthPage) {
11+
return NextResponse.redirect(new URL('/', request.url));
12+
}
13+
14+
return NextResponse.next();
15+
}
16+
17+
export const config = {
18+
matcher: ['/signin', '/signup'],
19+
};

0 commit comments

Comments
 (0)