初めに
Deviseはrailsを扱ったことがある人なら誰もが一度は実装するであろう有名なgemです。
しかし、機能自体は実装できたとしてもいまいちどこが動いて実装しているのかわからなかったり、いまいちどんな仕組みなのか掴めていない人も多いのではないでしょうか。
そこで今回はdeviseの基礎基本を自分なりに書いてみました。
#主な機能
Deviseは主に10個のmoduleからなるgemです。
一つ一つのmoduleを組み合わせてみなさんが使っているようなDeviseの機能として機能します。
しかし、最初から全てが機能しているわけではなく、最初は一部のみ機能しています。
module名 | 機能 |
---|---|
Database Authenticatable | データベースに保存するパスワードを暗号化する |
omniauthable | facebookやtwetterなどを利用したログイン新規登録の機能を実装する際に使う(https://github.com/omniauth/omniauth) |
confirmable | サインインをした際に既にアカウントが登録されているかどうかを確認できる |
recoverable | ユーザーのパスワードをリセットできる |
registerable | 新規登録ができる機能。この機能を実装することにより、編集削除機能が使えるようになる |
rememberable | cookieを使用し、ユーザー情報を保持する |
trackable | サインイン回数・時刻・IPアドレスを保存する |
timeoutable | 指定された時間使用しなかったセッションを期限切れにする |
validatable | メールアドレスとパスワードにバリデーションをかける |
lockable | 指定された回数サインインを失敗するとアカウントをロックする |
このmoduleを使用するかしないかの記述はuser.rbに記述します。(userの部分はdeviseに対応したファイル名)
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :omniauthable
devise: の後ろに続くものが指定されたmodule名です。
rails consoleでDevise.mappings
と打つと下記のような表示が出ますが、この中のmodulesというところに縦並びになっているものが機能しているmoduleとなります。
[1] pry(main)> Devise.mappings
=> {:user=>
#<Devise::Mapping:0x00007fc1a1255ae8
~省略~
@modules=
[:database_authenticatable,
:rememberable,
:omniauthable,
:recoverable,
:registerable,
:validatable],
#ルーティング
普段Deviseを使う際にroutes.rb
にdevise_for :users
という記述をするかと思います。
このusers
という部分はdevise内のコントローラで処理をする際に、スコープを設定するという処理をしており、ルートやuser_sign_in?などのメソッド名にも影響しています。
もしもcurrent_userなどのdeviseのメソッドを使いたいのであればdevise_forを設定する必要があります。
またルートをカスタマイズしたいとき、例えば/users/sign_inを/sign_inに変更したい場合はdevise_scopeを用います。
devise_scope :user do
get 'sign_in', to: 'devise/sessions#new'
end
###参考記事
https://github.com/plataformatec/devise#configuring-routes
https://qiita.com/ShinyaKato/items/a098a741a142616a753e
#最後に
ごく断片的な記事になってしまいましたが一つでも参考になれれば幸いです。