From dcb8036b1d20707e8b765d30de04b64a7767d742 Mon Sep 17 00:00:00 2001 From: adamjmcgrath Date: Thu, 6 Oct 2022 14:05:02 +0100 Subject: [PATCH 1/3] Test #841 --- examples/basic-example/pages/api/test.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 examples/basic-example/pages/api/test.js diff --git a/examples/basic-example/pages/api/test.js b/examples/basic-example/pages/api/test.js new file mode 100644 index 000000000..a324f1aa1 --- /dev/null +++ b/examples/basic-example/pages/api/test.js @@ -0,0 +1,13 @@ +import { getAccessToken, getSession } from '@auth0/nextjs-auth0'; + +export default async (req, res) => { + const session = getSession(req, res); + await getAccessToken(req, res, { + refresh: true, + afterRefresh(req, res, session) { + session.foo = Math.random(); + return session; + } + }); + res.json(session); +}; From 39c565b5c6f34534030b39ad634637807b8430ba Mon Sep 17 00:00:00 2001 From: adamjmcgrath Date: Thu, 6 Oct 2022 14:53:44 +0100 Subject: [PATCH 2/3] Changes to session aren't persisted in async getServerSideProps --- src/helpers/get-server-side-props-wrapper.ts | 4 ++-- tests/helpers/with-page-auth-required.test.ts | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/helpers/get-server-side-props-wrapper.ts b/src/helpers/get-server-side-props-wrapper.ts index 9d3ab298c..0420b6fb3 100644 --- a/src/helpers/get-server-side-props-wrapper.ts +++ b/src/helpers/get-server-side-props-wrapper.ts @@ -40,11 +40,11 @@ export type GetServerSidePropsWrapper

SessionCache) { return function getServerSidePropsWrapper(getServerSideProps: GetServerSideProps): GetServerSideProps { - return function wrappedGetServerSideProps(...args) { + return async function wrappedGetServerSideProps(...args) { const sessionCache = getSessionCache(); const [ctx] = args; sessionCache.init(ctx.req, ctx.res, false); - const ret = getServerSideProps(...args); + const ret = await getServerSideProps(...args); sessionCache.save(ctx.req, ctx.res); return ret; }; diff --git a/tests/helpers/with-page-auth-required.test.ts b/tests/helpers/with-page-auth-required.test.ts index 4dee56cfd..049f749a0 100644 --- a/tests/helpers/with-page-auth-required.test.ts +++ b/tests/helpers/with-page-auth-required.test.ts @@ -100,4 +100,25 @@ describe('with-page-auth-required ssr', () => { const [cookie] = headers['set-cookie']; expect(cookie).toMatch(/^appSession=/); }); + + test('save session when getServerSideProps completes async', async () => { + const baseUrl = await setup(withoutApi, { + withPageAuthRequiredOptions: { + async getServerSideProps(ctx) { + await Promise.resolve(); + const session = (global as any).getSession(ctx.req, ctx.res); + session.test = 'Hello World!'; + return { props: {} }; + } + } + }); + const cookieJar = await login(baseUrl); + + const { + res: { statusCode } + } = await get(baseUrl, '/protected', { cookieJar, fullResponse: true }); + expect(statusCode).toBe(200); + const session = await get(baseUrl, '/api/session', { cookieJar }); + expect(session.test).toBe('Hello World!'); + }); }); From 1be3ed8eb94378c971393935b5228f9074f1f230 Mon Sep 17 00:00:00 2001 From: adamjmcgrath Date: Thu, 6 Oct 2022 14:54:27 +0100 Subject: [PATCH 3/3] remove test --- examples/basic-example/pages/api/test.js | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 examples/basic-example/pages/api/test.js diff --git a/examples/basic-example/pages/api/test.js b/examples/basic-example/pages/api/test.js deleted file mode 100644 index a324f1aa1..000000000 --- a/examples/basic-example/pages/api/test.js +++ /dev/null @@ -1,13 +0,0 @@ -import { getAccessToken, getSession } from '@auth0/nextjs-auth0'; - -export default async (req, res) => { - const session = getSession(req, res); - await getAccessToken(req, res, { - refresh: true, - afterRefresh(req, res, session) { - session.foo = Math.random(); - return session; - } - }); - res.json(session); -};