はじめに
2023年2月10日現在、NextAuthのadapterであるFirebaseAdapterを使用するうえで詰まりまくったので備忘録として残しておく。
2023年2月27日時点でドキュメントの正常化とfirebase-adapter@2.0.1のリリースによりここに記載されている内容は無事修正されました。
何が起こったか
ここのドキュメントを参照しながら開発していたのだが、コピペして実行しても上手く動かない…
NextAuth.jsとAuth.jsてドキュメント2つあって実装方法少し違うんだけどなにこれ???
結論
ここ見ろ
流石にこれだけでは怒られそうなので補足
1.NextAuth.jsとAuth.jsとは?
元々あったのがNextAuth.jsという名前のライブラリ。
最近はSvelteKitやSolidStartにも対応したからAuth.jsという名前に変更になっただけ。
ただ、ドキュメントがNextAuth.jsとAuth.jsに分かれて少し混乱した。
NextAuth.jsのドキュメントはAuth.jsのドキュメントに順次移行しているらしいがしばらくかかりそう。
2.存在しないNode Module
この記事を見ている頃には直っているかもしれないが、
Installationのnpm install next-auth @next-auth/firebase-admin-adapter firebase-admin
という部分は間違い。
正しくはnpm install next-auth @next-auth/firebase-adapter firebase-admin
これはただただドキュメントがミスっていただけなので割とすぐ気づいた。
npm君から「そんなモジュールねえよ(E404)」と言われて調べてみたら4日前に@next-auth/firebase-adapter
が2.0.0
にバージョンアップしていた。インストールしたのはほぼ同時期なのでびっくり。
恐らく何かしらの手違いでfirebase-admin-adapterになっただけ。
そもそも何故メジャーバージョンが上がったのか?
Firebaseを使っている人は知っていると思うが、FirebaseのSDKは2つある。
クライアントサイドで動くfirebaseSDK(npm i firebase)とサーバーサイドで動くfirebaseAdminSDK(npm i firebase-admin)である。
それぞれ役割が違うのでインストールする時は注意。
で、どうやらクライアントSDKで実装されていた旧バージョンはFirestore Rulesを開放するとかいうとんでもない欠点があったらしい。
対象のGitHubスレッド
https://github.com/nextauthjs/next-auth/pull/5628#issue-1420003540
これを解消するためにAdminSDKを使用した方法に実装し直したのが2.0.0
というわけである。
3.なんか動かない
バージョンアップに対応した実装方法のはずなのに動かない事態が発生。
何故かERR_MODULE_NOT_FOUND
を吐く。
これはもしやライブラリのバグではと思いGitHubを確認すると以下のような発言が…
何と昨日回答されていた
ありがとう海外ニキ…
というわけでひとまず直接node_modulesからfirebase-adapterを参照インポートすることで無事解決。
実際にログインすると自動でデータベースにuserやsessionが作られたのでとりあえずヨシとした。
まとめ
- NextAuth.js=Auth.js
ただしドキュメント内容は少し違うので最新のAuth.jsを見る。 -
@next-auth/firebase-adapter
のver1.x
はセキュリティ的な面で問題があるのでver2.x
を使う。 - 困ったらGitHubを見てみる(必ず解決するとは言っていない)