Skip to content

Commit 57755c0

Browse files
committed
Implement onboard middleware
1 parent 203ea32 commit 57755c0

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

frontend/src/components/form/UserAvatarInput.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export function UserAvatarInput<TFieldValues extends FieldValues>({
4141
variant="soft"
4242
onClick={(e) => {
4343
e.preventDefault();
44+
alert("Coming Soon :)");
4445
}}
4546
>
4647
Upload Image

frontend/src/lib/auth.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
"use server";
2-
31
import { cookies } from "next/headers";
42
import {
53
AccessToken,
@@ -17,6 +15,7 @@ import { refreshAccessToken } from "@/services/authService";
1715
* @returns {Promise<AccessToken>}
1816
*/
1917
export async function getAccessToken(): Promise<AccessToken> {
18+
"use server";
2019
const cookieStore = cookies();
2120
const access_token = AccessTokenSchema.parse(
2221
cookieStore.get("access_token")?.value
@@ -38,7 +37,7 @@ function isTokenExpired(token: AccessToken): boolean {
3837
return decoded.exp < currentTime;
3938
}
4039

41-
function parseJwt(token: AccessToken): AccessTokenPayload {
40+
export function parseJwt(token: AccessToken): AccessTokenPayload {
4241
const base64Url = token.split(".")[1];
4342
const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
4443
const jsonPayload = decodeURIComponent(

frontend/src/middleware.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
import { NextResponse } from "next/server";
22
import type { NextRequest } from "next/server";
3+
import { parseJwt } from "@/lib/auth";
4+
import { AccessToken, AccessTokenSchema } from "./types/Token";
35

46
// This function can be marked `async` if using `await` inside
5-
export function middleware(request: NextRequest) {
7+
export async function middleware(request: NextRequest) {
68
const token = request.cookies.get("access_token");
79
if (!token) {
810
return NextResponse.redirect(new URL("/signin", request.url));
911
}
12+
13+
const tokenValue: AccessToken = AccessTokenSchema.parse(token.value);
14+
const decoded = parseJwt(tokenValue);
15+
16+
if (!decoded.isOnboarded) {
17+
return NextResponse.redirect(new URL("/onboard", request.url));
18+
}
19+
1020
return NextResponse.next();
1121
}
1222

frontend/src/types/Token.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const AccessTokenResponseSchema = createResponseSchema(AccessOnlySchema);
1919
export const AccessTokenPayloadSchema = z.object({
2020
sub: z.string(),
2121
email: z.string().email(),
22+
isOnboarded: z.boolean(),
2223
roles: z.string().array(),
2324
iat: z.number(),
2425
exp: z.number(),

0 commit comments

Comments
 (0)