Open1

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

なる💡サービス作り続ける人なる💡サービス作り続ける人

ideeeの認証について

背景

ideee.techというサイトを運営してきた
RailsだけのアプリからRailsはapiモードに変更。
フロントはNext.jsを採用し、GraphQLでデータを渡す構造へ変更

GraphQLについて

採用した背景としては

  • 開発体験が良すぎる
    • codegenたちのおかげでhooksがすぐに作れる
    • tsとの相性も良い
  • 現場で触ってた経験がある

認証用に使われるのが、token。
それと相性が良いのがdevise-token-auth

なので、deviseだけのアプリから
devise-token-authへの移行に乗り出しました。
(omniauthも公式に載ってるのでそれで対応できると踏んでました)
https://devise-token-auth.gitbook.io/devise-token-auth/config/omniauth

これからはそこから起きたエラーの変遷の話です。

やったこと

  • ✅devise-token-authでのメール認証
  • ✅devise-token-authでのログアウト
  • ❌devise-token-authでのOmniauth
    • twitter❌
    • twitter2✅
      • emailが取れないのでやりたくない
    • google❌

この辺り、認証に成功するも認可(Userへの紐付け)がうまくいかずに終わりました。

  • deviseでログイン
    • google✅
    • twitter❌(googleが通ってるので何かの設定ミス予想)
    • メール❌
      • routing周りで死亡してる模様
        • ✅Overwriteで書くことで対応

前提

  • devise-token-authとdeviseの設定はコンフリクトを起こしやすい
    • 途中、混合させて認証しようとしていた
  • 他の選択肢
    • devise-jwtを利用
      • 既存のメールログインを変更しないといけない
    • NextAuthで認証
      • 既存のデータにつなぎ込みができるか心配
    • omniauth単体で行う
  • 確認する要素(devise-token-authでの葛藤)
    • 以前のappのlocalhostで認証ができるのか → ✅
    • google_oauth2で試してみるとどうなるか → ❌
    • superが読み込めないのでコントローラーを修正 → ✅
      • 一度ログインができたタイミングがあったのが謎

方向性

current_userを使いたいのでdeviseを使用予定。
tokenについては、deviseとjwtを使うことで自前でBearerのtokenを発行する。

結果

deviseとOmniauthで対応
deviseはapiモードに対応させるためにOverwriteでControllerたちを設定