sidebase / nuxt-auth

Authentication built for Nuxt 3! Easily add authentication via OAuth providers, credentials or Email Magic URLs!
https://auth.sidebase.io
MIT License
1.16k stars 135 forks source link

Changing basePath breaks Nuxt dev server #210

Closed KoenCa closed 1 year ago

KoenCa commented 1 year ago

Environment

Nuxi 3.1.2


Reproduction

No response

Describe the bug

When changing the basePath the nuxt dev server breaks. For example when I change it to /api-front/auth, I get the following error:

[nuxt] [request error] [unhandled] [431] 431 Request Header Fields Too Large (http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/api-front/auth/session?callbackUrl=http://localhost:3000/)
  at runMicrotasks (<anonymous>)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)
  at async ./node_modules/@sidebase/nuxt-auth/dist/runtime/plugin.mjs:16:81
  at async Object.callAsync (./node_modules/unctx/dist/index.mjs:53:16)
  at async applyPlugin (./node_modules/nuxt/dist/app/nuxt.mjs:97:23)
  at async Module.applyPlugins (./node_modules/nuxt/dist/app/nuxt.mjs:107:5)
  at async createNuxtAppServer (./node_modules/nuxt/dist/app/entry.mjs:29:7)
  at async default (./node_modules/@nuxt/vite-builder/dist/runtime/vite-node.mjs:27:18)
  at async Object.renderToString (./node_modules/vue-bundle-renderer/dist/runtime.mjs:172:19)
  at async ./.nuxt/dev/index.mjs:722:21

Additional context

This happens on version 0.3.4 and 0.4.0-alpha.5.

Logs

No response

kvanska commented 1 year ago

another problem with baseUrl:

if app.baseURL set in nuxt.config.ts, nuxt-auth doesn't work.

if you set app.baseURL to "/mysite/" and then set nuxt-auth basePath to /mysite/api/auth, the login links are still using old URLs to /api/auth/.

BracketJohn commented 1 year ago

Hey @KoenCa 👋

I tested it out, and it works as expected.

I was only able to reproduce this error when I incorrectly setup the auth handler. The setup of this handler is described here: https://sidebase.io/nuxt-auth/configuration/nuxt-auth-handler

When I change:

  1. basePath: '/api-front/auth' in nuxt.config.ts
  2. not add the auth handler at the required location: /routes/api-front/auth/[...].ts

I get an infinite redirect (which at some point would lead to the HTTP 431 error you reported @KoenCa. This happens because when you do not add the route/... handler as described in step (2) above nuxt will interpret /api-front/* requests as reuqests to a frontend page. These are protected by the global middleware, so it starts redirecting. But the redirect goes to /api-front/* again, so it's yet another "regular" page so yet another redirect -> rinse and repeat.

For this reason I have a strong suspicion that you did not correctly add the auth handler.


Hey @kvanska 👋

I think this one is an existging, separate problem from the one that @KoenCa reported. Can you please open a new issue for this?

KoenCa commented 1 year ago

Hey @BracketJohn ,

You're right, I made a mistake. I changed the basePath and renamed the api folder to api-front, but I should have made that folder in a routes folder. At the time I didn't understand that api is a default Nuxt folder and that you need to put 'custom' routes (that don't start with api) in a separate routes folder. So now when I put it in /routes/api-front/auth/[...].ts, it works!

Thanks for the explanation! I shall close this issue.

BracketJohn commented 1 year ago

Sure thing - glad that you figured it out (: