File tree Expand file tree Collapse file tree 4 files changed +15
-4
lines changed Expand file tree Collapse file tree 4 files changed +15
-4
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,7 @@ export function UserAvatarInput<TFieldValues extends FieldValues>({
41
41
variant = "soft"
42
42
onClick = { ( e ) => {
43
43
e . preventDefault ( ) ;
44
+ alert ( "Coming Soon :)" ) ;
44
45
} }
45
46
>
46
47
Upload Image
Original file line number Diff line number Diff line change 1
- "use server" ;
2
-
3
1
import { cookies } from "next/headers" ;
4
2
import {
5
3
AccessToken ,
@@ -17,6 +15,7 @@ import { refreshAccessToken } from "@/services/authService";
17
15
* @returns {Promise<AccessToken> }
18
16
*/
19
17
export async function getAccessToken ( ) : Promise < AccessToken > {
18
+ "use server" ;
20
19
const cookieStore = cookies ( ) ;
21
20
const access_token = AccessTokenSchema . parse (
22
21
cookieStore . get ( "access_token" ) ?. value
@@ -38,7 +37,7 @@ function isTokenExpired(token: AccessToken): boolean {
38
37
return decoded . exp < currentTime ;
39
38
}
40
39
41
- function parseJwt ( token : AccessToken ) : AccessTokenPayload {
40
+ export function parseJwt ( token : AccessToken ) : AccessTokenPayload {
42
41
const base64Url = token . split ( "." ) [ 1 ] ;
43
42
const base64 = base64Url . replace ( / - / g, "+" ) . replace ( / _ / g, "/" ) ;
44
43
const jsonPayload = decodeURIComponent (
Original file line number Diff line number Diff line change 1
1
import { NextResponse } from "next/server" ;
2
2
import type { NextRequest } from "next/server" ;
3
+ import { parseJwt } from "@/lib/auth" ;
4
+ import { AccessToken , AccessTokenSchema } from "./types/Token" ;
3
5
4
6
// This function can be marked `async` if using `await` inside
5
- export function middleware ( request : NextRequest ) {
7
+ export async function middleware ( request : NextRequest ) {
6
8
const token = request . cookies . get ( "access_token" ) ;
7
9
if ( ! token ) {
8
10
return NextResponse . redirect ( new URL ( "/signin" , request . url ) ) ;
9
11
}
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
+
10
20
return NextResponse . next ( ) ;
11
21
}
12
22
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ export const AccessTokenResponseSchema = createResponseSchema(AccessOnlySchema);
19
19
export const AccessTokenPayloadSchema = z . object ( {
20
20
sub : z . string ( ) ,
21
21
email : z . string ( ) . email ( ) ,
22
+ isOnboarded : z . boolean ( ) ,
22
23
roles : z . string ( ) . array ( ) ,
23
24
iat : z . number ( ) ,
24
25
exp : z . number ( ) ,
You can’t perform that action at this time.
0 commit comments