next-auth icon indicating copy to clipboard operation
next-auth copied to clipboard

next-auth v5: Bug when using the auth function inside getServerSideProps with nextjs v14

Open trm217 opened this issue 1 year ago • 4 comments

Environment

  System: irrelevant
  Binaries:
    Node: 21.2.0 - 
    Yarn: 1.22.22 - 
    npm: 10.2.3 - 
    pnpm: 9.12.3 - 
  Browsers: ittrlrbsnz
  npmPackages:
    next: 14.2.17 => 14.2.17
    next-auth: ^5.0.0-beta.25 => 5.0.0-beta.25
    react: ^18 => 18.3.1

Reproduction URL

https://github.com/trm217/next-auth-v5beta--nextjs-ssr-bug

Describe the issue

I found that next-auth can't be used inside getServerSideProps functions, when using next-auth v5 beta with Nextjs v14. Using auth(ctx) inside getServerSideProps yields the following error:

CleanShot 2024-11-11 at 12 21 37

Code that causes this error:

export async function getServerSideProps(
  ctx: GetServerSidePropsContext
): Promise<GetServerSidePropsResult<Props>> {
  const session = auth(ctx);
  return {
    props: {
      message: !!session ? "Hi! :)" : "You're not logged in.",
    },
  };
}

How to reproduce

  1. Clone the reproduction & cd into the folder
  2. Install dependencies
  3. Create the env with npx auth secret
  4. Run the app in dev-mode using npm run dev
  5. Visit https://localhost:3000
  6. Login with the credentials username admin, password admin
  7. After successful authentication, you'll be redirected to http://localhost3000 where we attempt to load the session inside a getServerSideProps function. You'll see the error being thrown.

Expected behavior

We'd expect the auth function created through the NextAuth function to work as defined in the docs on how to use next-auth v5, where inside SSR within Next.js one should be able to call await auth(getServerSidePropsContext) to retrieve the session.

CleanShot 2024-11-11 at 12 19 44

https://authjs.dev/getting-started/migrating-to-v5 under authentication methods

trm217 avatar Nov 11 '24 11:11 trm217

Hey @trm217, were you able to somehow fix this?

My only option for now is either getting the session clientSide or migrate the to app router (not an option now).

pedroleung avatar Nov 15 '24 00:11 pedroleung

@pedroleung No, I couldn‘t find a sensible way to workaround this issue.

trm217 avatar Nov 15 '24 05:11 trm217

To workaround the issue you could add

transpilePackages: ["next-auth"]

in your next.config.js

oceandrama avatar Jan 19 '25 16:01 oceandrama

@oceandrama can you elaborate on why this (seemingly?) works? Unreal how many people are having this issue without a definitive solution. I'm using v15 but cannot use AuthJS on a legacy pages router getServerSideProps without this flag.

chris-erickson avatar May 06 '25 14:05 chris-erickson