@@ -3,14 +3,14 @@ import type { NextRequest } from "next/server";
33import { SessionContainer } from "supertokens-node/recipe/session" ;
44import { withSession } from "supertokens-node/nextjs" ;
55import { ensureSuperTokensInit } from "./app/config/backend" ;
6+ import { ssrConfig } from "./app/config/ssr" ;
7+ import { superTokensSessionMiddleware } from "supertokens-auth-react/nextjs" ;
68
79ensureSuperTokensInit ( ) ;
810
9- export async function middleware ( request : NextRequest & { session ?: SessionContainer } ) {
10- // if (request.nextUrl.pathname.startsWith("/api/refresh")) {
11- // return refreshSession(request);
12- // }
11+ init ( ssrConfig ( ) ) ;
1312
13+ export async function middleware ( request : NextRequest & { session ?: SessionContainer } ) {
1414 if ( request . nextUrl . pathname . startsWith ( "/api" ) ) {
1515 if ( request . headers . has ( "x-user-id" ) ) {
1616 console . warn (
@@ -40,96 +40,85 @@ export async function middleware(request: NextRequest & { session?: SessionConta
4040 } ) ;
4141 }
4242
43- const shouldRefresh = request . nextUrl . searchParams . get ( "forceRefresh" ) === "true" ;
44- if ( shouldRefresh ) {
45- return refreshSession ( request ) ;
46- }
47-
48- // Save the current path so that we can use it during SSR
49- // Used to redirect the user to the correct path after login/refresh
50- return NextResponse . next ( {
51- headers : {
52- "x-current-path" : request . nextUrl . pathname ,
53- } ,
54- } ) ;
43+ return superTokensSessionMiddleware ( request , NextResponse ) ;
5544}
5645
5746const refreshTokenCookieName = "sRefreshToken" ;
5847const refreshTokenHeaderName = "st-refresh-token" ;
5948
60- async function refreshSession ( request : NextRequest ) {
61- console . log ( "Attempting session refresh" ) ;
62- const refreshToken =
63- request . cookies . get ( refreshTokenCookieName ) ?. value || request . headers . get ( refreshTokenHeaderName ) ;
64- if ( ! refreshToken ) {
65- return NextResponse . redirect ( new URL ( "/auth" , request . url ) ) ;
66- }
67-
68- const redirectTo = request . nextUrl . pathname ;
69- console . log ( `Should redirect to ${ redirectTo } ` ) ;
70- try {
71- const refreshResponse = await fetch ( `http://localhost:3000/api/auth/session/refresh` , {
72- method : "POST" ,
73- headers : {
74- "Content-Type" : "application/json" ,
75- Cookie : `sRefreshToken=${ refreshToken } ` ,
76- } ,
77- credentials : "include" ,
78- } ) ;
79- console . log ( "Performed session refresh request" ) ;
80-
81- const setCookieHeaders = refreshResponse . headers . getSetCookie ( ) ;
82- console . log ( refreshResponse ) ;
83- console . log ( refreshResponse . headers ) ;
84- console . log ( "Cookies" , setCookieHeaders ) ;
85-
86- if ( ! setCookieHeaders . length ) {
87- return NextResponse . redirect ( new URL ( "/auth" , request . url ) ) ;
88- }
89-
90- const frontToken = refreshResponse . headers . get ( "front-token" ) ;
91- if ( ! frontToken ) {
92- return NextResponse . redirect ( new URL ( "/auth" , request . url ) ) ;
93- }
94-
95- let sAccessToken : string | null = null ;
96- let sRefreshToken : string | null = null ;
97-
98- const redirectTo = new URL ( "/" , request . url ) ;
99- const response = NextResponse . redirect ( redirectTo ) ;
100- for ( const header of setCookieHeaders ) {
101- if ( header . includes ( "sAccessToken" ) ) {
102- const match = header . match ( / s A c c e s s T o k e n = ( [ ^ ; ] + ) / ) ;
103- sAccessToken = match ? match [ 1 ] : null ;
104- }
105- if ( header . includes ( "sRefreshToken" ) ) {
106- const match = header . match ( / s R e f r e s h T o k e n = ( [ ^ ; ] + ) / ) ;
107- sRefreshToken = match ? match [ 1 ] : null ;
108- }
109- response . headers . append ( "set-cookie" , header ) ;
110- }
111-
112- response . headers . append ( "set-cookie" , `sFrontToken=${ frontToken } ` ) ;
113- response . headers . append ( "front-token" , frontToken ) ;
114- response . headers . append ( "frontToken" , frontToken ) ;
115- if ( sAccessToken ) {
116- response . headers . append ( "sAccessToken" , sAccessToken ) ;
117- response . cookies . set ( "sAccessToken" , sAccessToken ) ;
118- }
119- if ( sRefreshToken ) {
120- response . headers . append ( "sRefreshToken" , sRefreshToken ) ;
121-
122- response . cookies . set ( "sRefreshToken" , sRefreshToken ) ;
123- }
124-
125- response . cookies . set ( "sFrontToken" , frontToken ) ;
126- return response ;
127- } catch ( err ) {
128- console . error ( "Error refreshing session" ) ;
129- console . error ( err ) ;
130- return NextResponse . redirect ( new URL ( "/auth" , request . url ) ) ;
131- }
132- }
49+ // async function refreshSession(request: NextRequest) {
50+ // console.log("Attempting session refresh");
51+ // const refreshToken =
52+ // request.cookies.get(refreshTokenCookieName)?.value || request.headers.get(refreshTokenHeaderName);
53+ // if (!refreshToken) {
54+ // return NextResponse.redirect(new URL("/auth", request.url));
55+ // }
56+ //
57+ // const redirectTo = request.nextUrl.pathname;
58+ // console.log(`Should redirect to ${redirectTo}`);
59+ // try {
60+ // const refreshResponse = await fetch(`http://localhost:3000/api/auth/session/refresh`, {
61+ // method: "POST",
62+ // headers: {
63+ // "Content-Type": "application/json",
64+ // Cookie: `sRefreshToken=${refreshToken}`,
65+ // },
66+ // credentials: "include",
67+ // });
68+ // console.log("Performed session refresh request");
69+ //
70+ // const setCookieHeaders = refreshResponse.headers.getSetCookie();
71+ // console.log(refreshResponse);
72+ // console.log(refreshResponse.headers);
73+ // console.log("Cookies", setCookieHeaders);
74+ //
75+ // if (!setCookieHeaders.length) {
76+ // return NextResponse.redirect(new URL("/auth", request.url));
77+ // }
78+ //
79+ // const frontToken = refreshResponse.headers.get("front-token");
80+ // if (!frontToken) {
81+ // return NextResponse.redirect(new URL("/auth", request.url));
82+ // }
83+ //
84+ // let sAccessToken: string | null = null;
85+ // let sRefreshToken: string | null = null;
86+ //
87+ // const redirectTo = new URL("/", request.url);
88+ // const response = NextResponse.redirect(redirectTo);
89+ // for (const header of setCookieHeaders) {
90+ // if (header.includes("sAccessToken")) {
91+ // const match = header.match(/sAccessToken=([^;]+)/);
92+ // sAccessToken = match ? match[1] : null;
93+ // }
94+ // if (header.includes("sRefreshToken")) {
95+ // const match = header.match(/sRefreshToken=([^;]+)/);
96+ // sRefreshToken = match ? match[1] : null;
97+ // }
98+ // response.headers.append("set-cookie", header);
99+ // }
100+ //
101+ // response.headers.append("set-cookie", `sFrontToken=${frontToken}`);
102+ // response.headers.append("front-token", frontToken);
103+ // response.headers.append("frontToken", frontToken);
104+ // if (sAccessToken) {
105+ // response.headers.append("sAccessToken", sAccessToken);
106+ // response.cookies.set("sAccessToken", sAccessToken);
107+ // }
108+ // if (sRefreshToken) {
109+ // response.headers.append("sRefreshToken", sRefreshToken);
110+ //
111+ // response.cookies.set("sRefreshToken", sRefreshToken);
112+ // }
113+ //
114+ // response.cookies.set("sFrontToken", frontToken);
115+ // return response;
116+ // } catch (err) {
117+ // console.error("Error refreshing session");
118+ // console.error(err);
119+ // return NextResponse.redirect(new URL("/auth", request.url));
120+ // }
121+ // }
133122
134123export const config = {
135124 matcher : [ "/((?!api|_next/static|_next/image|favicon.ico).*)" ] ,
0 commit comments