Open2

Electron+Next.js+NextAuth.jsでサインイン時のリダイレクトで詰まった話

kage1020kage1020

Next.jsで作ったアプリをElectronで配布しようと思ってelectron-nextでwrapしたが,next-authのsignInやsignOut(そもそもReact Routerのpush等も)でのリダイレクトが機能しなかった.
具体的には

(node:21420) electron: Failed to load URL: http://localhost:3000/ with error: ERR_CONNECTION_REFUSED
(Use `electron --trace-warnings ...` to show where the warning was created)

というエラーが出てリソースが読み込まれなかった.headやbodyの中身が全くない.

kage1020kage1020

next-authにはnext.js(react)のrouterにwrapする形で[...nextauth].jsでリダイレクト先を変更するオプションがある.ここをデフォルトからうまくいじってあげると正しくリダイレクトされる.

 ...
 callbacks: {
   redirect: async ({ url, baseUrl }: { url: string, baseUrl: string }) => {
     if (url.startsWith("/")) return `${baseUrl}${url}`
-    else if (new URL(url).origin === baseUrl) return url
-    return baseUrl
+    return url
   }
 ...