改めてdeviseの使い方をおさらいしてみる
学習のためにいくつかアプリを作ってきましたが、ユーザー管理機能の実装には必ずdeviseを使っています。しかし、毎回なんとなく使っていて、deviseが何をしてくれているのかはあまり意識してこなかったので、少し考えてみることにしました。
gem 'devise'をインストール
gemfileにgem 'devise'
と記述してbundle install
するだけ。
deviseの設定ファイルを作成
deviseをインストールしたら、ターミナルで次のコマンドを実行します。
% rails g devise:install
ファイルが二つ生成されて、メッセージが4つ出てきましたね。
まずはconfig/initializers/devise.rb
というファイル。これがdeviseの機能に関する設定ファイルみたいですね。全部読むのは大変そうですが、メールアドレスやパスワードのバリデーションもここに書いてありました。
次にconfig/locales/devise.en.yml
というlocaleファイル。エラーなどのメッセージが書いてあります。
その後の4つのメッセージもみてみると、
一つ目はアプリケーションにurlを与えましょうということですかね。
二つ目が、ルートを設定しましょう。
三つ目が、フラッシュを表示するための記述をapp/views/layouts/application.html.erb
に書いておきましょう。
最後に、ビューファイルを編集したければrails g devise:views
を実行しましょう。
なるほど。普段しっかり読んでいませんでしたが、こういうことが書かれていたんですね。
deviseを使ってUserモデルを作成
続いてモデルを作成します。User以外のモデルも作れるらしいですが、Userで使うことが多いと思います。
% rails g devise user
マイグレーションファイルとユーザーモデル、テスト関連のファイルが作成されています。さらにusersに関するルーティングも自動で設定されました。
マイグレーション
マイグレーションファイルに必要なカラムを追加して、マイグレーションを行います。
rails db:migrate
deviseはログイン画面などのビューも自動で用意してくれるので、これだけで最低限のログイン機能は実装できました。
めちゃめちゃシンプルなので自分で編集したほうがいいとは思いますが。
ビューの編集
deviseが用意してくれているビューを編集するには、次のコマンドを実行します。
% rails g devise:views
これによりapp/views/devise
のなかにビューファイルが作成されるので、自分で編集することが可能になります。
こんな感じでたくさん出来ています。主に使うのは新規登録画面の/registration/new.html.erb
とログイン画面の/sessions/new.html.erb
ですかね。
deviseの機能
deviseをインストールすると使える10個のモジュールがapp/models/user.rb
に書いてあります。いろいろ書いてあるなあと思いつつ今までスルーしていました。
database_authenticatable
パスワードの管理・認証をしてくれています。パスワードの暗号化なども行っています。
registerable
ユーザー登録が可能になります。アカウント情報の編集や削除もできます。
recoverable
パスワードのリセットが可能になります。
rememberable
ユーザートークンを生成してクッキーに保存、もしくは保存されたトークンの削除を行います。これによってユーザーがログインしたままの状態を保つことができます。
validatable
メールアドレスとパスワードに関するバリデーションを設定してくれています。メールアドレスには、空ではない、重複していない、フォーマットが正しいというバリデーション、パスワードには、空ではない、確認用と一致、6~128文字というバリデーションが設定されているみたいです。
confirmable
登録されたメールアドレスに対して確認のメールを送る、という機能を追加できます。
lockable
一定回数ログインに失敗するとアカウントがロックされる、という機能を追加できます。ロックの解除には登録されたメールアドレスにメールを送る、もしくは一定時間待つ、の二つの方法があります。
timeoutable
ユーザーが一定時間操作を行なっていないと自動的にログアウトさせる、という機能を追加できます。
trackable
ユーザーがログインした回数、時間、IPアドレスを記録することができるようになります。
omniauthable
Twitterアカウントでのログインなどを可能にするのに必要なものです。
まとめ
deviseにはまだ使ったことのない機能もいろいろあることがわかったので、使ってみたいです。詳しいことは使う時に調べるしかないですね。
ちなみに以前にも似たような記事を書いていましたが、この頃よりはdeviseやRailsでのアプリ製作に慣れてきたような気がします。成長してる、はず。