Skip to content

Commit 1d48378

Browse files
committed
Move everything in the library
1 parent 4190020 commit 1d48378

File tree

12 files changed

+383
-334
lines changed

12 files changed

+383
-334
lines changed

examples/with-next-ssr-app-directory/app/components/home.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import { CallAPIButton } from "./callApiButton";
77
import { LinksComponent } from "./linksComponent";
88
import { SessionAuthForNextJS } from "./sessionAuthForNextJS";
99

10-
import { getSSRSession } from "supertokens-auth-react/nextjs/ssr";
10+
import { getSSRSession, init } from "supertokens-auth-react/nextjs/ssr";
11+
import { ssrConfig } from "../config/ssr";
12+
13+
init(ssrConfig());
1114

1215
export async function HomePage() {
1316
const cookiesStore = await cookies();

examples/with-next-ssr-app-directory/app/components/supertokensProvider.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,14 @@ import SuperTokensReact from "supertokens-auth-react";
55
import { frontendConfig, setRouter } from "../config/frontend";
66
import { usePathname, useRouter } from "next/navigation";
77

8-
// if (typeof window !== "undefined") {
9-
// // we only want to call this init function on the frontend, so we check typeof window !== 'undefined'
10-
// SuperTokensReact.init(frontendConfig());
11-
// }
12-
//
13-
// import { init, setRouterData } from "../../../../lib/build/custom";
14-
import { init, setRouterData } from "supertokens-auth-react/nextjs";
15-
16-
init(frontendConfig());
8+
if (typeof window !== "undefined") {
9+
// we only want to call this init function on the frontend, so we check typeof window !== 'undefined'
10+
SuperTokensReact.init(frontendConfig());
11+
} else {
12+
}
1713

1814
export const SuperTokensProvider: React.FC<React.PropsWithChildren<{}>> = ({ children }) => {
19-
// setRouter(useRouter(), usePathname() || window.location.pathname);
20-
21-
setRouterData(useRouter(), usePathname() || window.location.pathname);
15+
setRouter(useRouter(), usePathname() || window.location.pathname);
2216

2317
return <SuperTokensWrapper>{children}</SuperTokensWrapper>;
2418
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { appInfo } from "./appInfo";
2+
import { useRouter } from "next/navigation";
3+
import { SuperTokensConfig } from "supertokens-auth-react/lib/build/types";
4+
import { init } from "supertokens-auth-react/nextjs";
5+
6+
const routerInfo: { router?: ReturnType<typeof useRouter>; pathName?: string } = {};
7+
8+
export function setRouter(router: ReturnType<typeof useRouter>, pathName: string) {
9+
routerInfo.router = router;
10+
routerInfo.pathName = pathName;
11+
}
12+
13+
export const ssrConfig = (): SuperTokensConfig => {
14+
return {
15+
appInfo,
16+
enableDebugLogs: true,
17+
recipeList: [],
18+
};
19+
};
20+
21+
export const ensureSuperTokensSSRInit = () => {
22+
init(ssrConfig());
23+
};

examples/with-next-ssr-app-directory/middleware.ts

Lines changed: 78 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import type { NextRequest } from "next/server";
33
import { SessionContainer } from "supertokens-node/recipe/session";
44
import { withSession } from "supertokens-node/nextjs";
55
import { ensureSuperTokensInit } from "./app/config/backend";
6+
import { ssrConfig } from "./app/config/ssr";
7+
import { superTokensSessionMiddleware } from "supertokens-auth-react/nextjs";
68

79
ensureSuperTokensInit();
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

5746
const refreshTokenCookieName = "sRefreshToken";
5847
const 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(/sAccessToken=([^;]+)/);
103-
sAccessToken = match ? match[1] : null;
104-
}
105-
if (header.includes("sRefreshToken")) {
106-
const match = header.match(/sRefreshToken=([^;]+)/);
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

134123
export const config = {
135124
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],

lib/ts/nextjs/config.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

lib/ts/nextjs/index.ts

Lines changed: 0 additions & 99 deletions
This file was deleted.

0 commit comments

Comments
 (0)