ぎんさんマインド

いちエンジニアの思考とか趣味についてつらつらと書いてみるかもしれない。

Deviseを読み解く

Rails appで認証フローにおいてよく使われるDeviseだが、かなりやっていることも多く中身もブラックボックスとなっていて見にくい部分も多い。
だが調べると簡単な導入方法や使い方ばかり出てくるので残しておく。

Deviseとは

そもそもDeviseとはwardenをベースに認証のソリューションを提供するgemである。
基本的にはCokkieにトークンを保管し認可する方式をとっていて、
RailsのようなMVCベースで構築し、10のモジュールを提供しているので、必要なものだけ使ってくださいと言う形。
一覧としては以下

Database Authenticatable データベースによる認証サインインの提供、パスワードをハッシュして保存したり、パスワード変更時のメール通知などを提供
Omniauthable OAuth認証をサポート
Confirmable 認証確認手順を提供、アカウント登録時にメールを送信するなど
Recoverable アカウントの復旧、パスワードのリセット処理など
Registerable ユーザーのサインアップやアカウントの編集削除処理などを提供
Rememberable クッキーに保管されたユーザーを判別するためのトークンの生成削除
Trackable サインインの回数、日時、IPアドレスなどを管理
Timeoutable セッション有効期限の設定管理
Validatable メールやパスワードに対するオプションの提供
Lockable アカウントロック処理の提供


基本はRailsをベースにしているのでjwt認証や2段階認証はないが、別で作られている
https://github.com/waiting-for-dev/devise-jwt https://github.com/tinfoil/devise-two-factor
そのほかrubygemsで調べると色々出てくる
https://rubygems.org/search?query=devise

作成時の挙動から

rails g devise usersした時にcontrollerに
https://github.com/heartcombo/devise/tree/main/lib/generators/templates/controllers
をusers配下に一通り作成する。
作成されたcontrollerは
github.com
のクラスを継承しているので、挙動の確認に困った場合はここから見ていくと良い。
各々がやってることはmoduleを元に見ていけばわかる。

ユーザーテーブルに干渉するカラム

https://github.com/heartcombo/devise/blob/main/lib/generators/mongoid/devise_generator.rb#L24-L53
を参照してみるとデフォルト作る場合はこれだけカラムを設定している。
設定より規約を重視するgemであれば、どこを見ればわからないときはgeneratorsでデフォルトで入るカラム一覧をみることでわかりそう。