Open1
リプレース対応時のdeviseの闇

ideeeの認証について
背景
ideee.techというサイトを運営してきた
RailsだけのアプリからRailsはapiモードに変更。
フロントはNext.jsを採用し、GraphQLでデータを渡す構造へ変更
GraphQLについて
採用した背景としては
- 開発体験が良すぎる
- codegenたちのおかげでhooksがすぐに作れる
- tsとの相性も良い
- 現場で触ってた経験がある
認証用に使われるのが、token。
それと相性が良いのがdevise-token-auth
なので、deviseだけのアプリから
devise-token-authへの移行に乗り出しました。
(omniauthも公式に載ってるのでそれで対応できると踏んでました)
これからはそこから起きたエラーの変遷の話です。
やったこと
- ✅devise-token-authでのメール認証
- ✅devise-token-authでのログアウト
- ❌devise-token-authでのOmniauth
- twitter❌
- twitter2✅
- emailが取れないのでやりたくない
- google❌
この辺り、認証に成功するも認可(Userへの紐付け)がうまくいかずに終わりました。
- deviseでログイン
- google✅
- twitter❌(googleが通ってるので何かの設定ミス予想)
- メール❌
- routing周りで死亡してる模様
- ✅Overwriteで書くことで対応
- routing周りで死亡してる模様
前提
- devise-token-authとdeviseの設定はコンフリクトを起こしやすい
- 途中、混合させて認証しようとしていた
- 他の選択肢
- devise-jwtを利用
- 既存のメールログインを変更しないといけない
- NextAuthで認証
- 既存のデータにつなぎ込みができるか心配
- omniauth単体で行う
- devise-jwtを利用
- 確認する要素(devise-token-authでの葛藤)
- 以前のappのlocalhostで認証ができるのか → ✅
- google_oauth2で試してみるとどうなるか → ❌
- superが読み込めないのでコントローラーを修正 → ✅
- 一度ログインができたタイミングがあったのが謎
方向性
current_userを使いたいのでdeviseを使用予定。
tokenについては、deviseとjwtを使うことで自前でBearerのtokenを発行する。
結果
deviseとOmniauthで対応
deviseはapiモードに対応させるためにOverwriteでControllerたちを設定