Ruby
Rails

【Rails】deviseのまとめ


deviseとは

railsでwebアプリケーションを作成する際に、

簡単に認証機能(ログイン・ログアウト)を実装することができるGemのこと


導入


①Gemfileを編集


Gemfile

source 'https://rubygems.org'

# 省略

gem 'devise'



②インストール


terminal

$ bundle install


これでGemのインストールが完了


設定


① deviseの設定ファイルをアプリケーションにインストール


terminal

$ rails g devise:install



② deviseで認証するためのモデルを作成


terminal

$ rails g devise User 



③ migrationファイルの読み込み


terminal

$ rake db:migrate


これでモデルとDBの作成が完了


表示の確認

サーバーを起動し、以下のURLへアクセスすると画面の表示を確認することができる。


サインアップ(新規登録画面)

http://localhost:3000/users/sign_up


サインイン(ログイン画面)

http://localhost:3000/users/sign_in


deviseのモジュール

作成した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
end

各モジュールの機能一覧

(● = デフォルトで使用できるようになっているもの)

機能
概要
デフォルト

database_authenticatable
サインイン時にユーザーの正当性を検証するためにパスワードを暗号化してDBに登録します。認証方法としてはPOSTリクエストかHTTP Basic認証が使えます。

registerable
登録処理を通してユーザーをサインアップします。また、ユーザーに自身のアカウントを編集したり削除することを許可します。

recoverable
パスワードをリセットし、それを通知します。

rememberable
保存されたcookieから、ユーザーを記憶するためのトークンを生成・削除します。

trackable
サインイン回数や、サインイン時間、IPアドレスを記録します。

validatable
Emailやパスワードのバリデーションを提供します。独自に定義したバリデーションを追加することもできます。

confirmable
メールに記載されているURLをクリックして本登録を完了する、といったよくある登録方式を提供します。また、サインイン中にアカウントが認証済みかどうかを検証します。

lockable
一定回数サインインを失敗するとアカウントをロックします。ロック解除にはメールによる解除か、一定時間経つと解除するといった方法があります。

timeoutable
一定時間活動していないアカウントのセッションを破棄します。

omniauthable
intridea/omniauthをサポートします。TwitterやFacebookなどの認証を追加したい場合はこれを使用します。


ヘルパーメソッド

deviseをインストールすると使用することができるメソッドの一覧

メソッド
用途

before_action :authenticate_user!
コントローラーに設定して、ログイン済ユーザーのみにアクセスを許可する

user_signed_in?
ユーザーがサインイン済かどうかを判定する

current_user
サインインしているユーザーを取得する

user_session
ユーザーのセッション情報にアクセスする

※モデル名にUser以外を使用している場合、それぞれのメソッドの『user』部分を書き換える


モデル名が「member」の場合

before_action :authenticate_member!

member_signed_in?
current_member
member_session
before_action :authenticate_member!


参考