Reputation: 1265
In my Next.js application using auth.js (5.0.0-beta19), attempting to sign in with a different OAuth provider (e.g. Facebook) using an email address already associated with a sign-in of another provider (e.g. Google) results in a server-side error:
[auth][error] OAuthAccountNotLinked: Another account already exists with the same e-mail address. Read more at https://errors.authjs.dev#oauthaccountnotlinked
at handleLoginOrRegister (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/actions/callback/handle-login.js:255:23)
at async Module.callback (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/actions/callback/index.js:65:50)
at async AuthInternal (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/index.js:39:24)
at async Auth (webpack-internal:///(rsc)/./node_modules/@auth/core/index.js:126:34)
at async /home/simon/devel/learn/next.js/my-app/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:55038
at async ek.execute (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:45808)
at async ek.handle (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:56292)
at async doRender (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:1377:42)
at async cacheEntry.responseCache.get.routeKind (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:1587:40)
at async DevServer.renderToResponseWithComponentsImpl (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:1507:28)
at async DevServer.renderPageComponent (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:1931:24)
at async DevServer.renderToResponseImpl (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:1969:32)
at async DevServer.pipeImpl (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:920:25)
at async NextNodeServer.handleCatchallRenderRequest (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/next-server.js:272:17)
at async DevServer.handleRequestImpl (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/base-server.js:816:17)
at async /home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/dev/next-dev-server.js:339:20
at async Span.traceAsyncFn (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/trace/trace.js:154:20)
at async DevServer.handleRequest (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/dev/next-dev-server.js:336:24)
at async invokeRender (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/lib/router-server.js:174:21)
at async handleRequest (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/lib/router-server.js:353:24)
at async requestHandlerImpl (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/lib/router-server.js:377:13)
at async Server.requestListener (/home/simon/devel/learn/next.js/my-app/node_modules/next/dist/server/lib/start-server.js:141:13)
And the client side will be redirected to a page like this:
This looks like a built-in page provided by auth.js.
https://errors.authjs.dev#oauthaccountnotlinked mentioned the allowDangerousEmailAccountLinking
option, but I don't want to turn it on for the providers, at the same time, I don't want this page to be shown to users. How to silently redirect the user to the website's signin page when this happens? Or is there a better way to handle this error?
Upvotes: 0
Views: 310