26
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】Deviseの基礎

Posted at

初めに

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に対応したファイル名)

user.rb
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.rbdevise_for :usersという記述をするかと思います。
このusersという部分はdevise内のコントローラで処理をする際に、スコープを設定するという処理をしており、ルートやuser_sign_in?などのメソッド名にも影響しています。
もしもcurrent_userなどのdeviseのメソッドを使いたいのであればdevise_forを設定する必要があります。

またルートをカスタマイズしたいとき、例えば/users/sign_inを/sign_inに変更したい場合はdevise_scopeを用います。

routes.rb
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

#最後に
ごく断片的な記事になってしまいましたが一つでも参考になれれば幸いです。

26
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?