deviseとは
DeviseとはRailsで作成したアプリケーションへ簡単に認証機能を実装することができるgem(ライブラリ)の一つです。
ログイン、ログアウト、サインアップなどの機能を自分自身で作成するのは時間がかかりますが、devise(gem)をインストールすることでコードも簡潔に簡単に実装することができます。
Deviseをインストールすることで下記の機能を実装することができます。
- サインアップ機能
- サインイン機能
- アカウント編集機能
- パスワード変更機能
- メール認証機能
- アカウント凍結機能
deviseインストール手順
gemfileに下記を追記してbundle install
(devise-i18nは国際化gemで日本語化することができます。必要のない場合はgemfileに追記する必要はないです。)
gem 'devise'
gem 'devise-i18n'
bundle install完了後下記コマンドを実行
$ rails generate devise:install
deviseの設定
コマンドを実行して、正常に完了したら下記のようになります。
必要に応じてファイル等をい編集してください。
Depending on your application's configuration some manual setup may be required:
1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
In production, :host should be set to the actual host of your application.
* Required for all applications. *
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
* Not required for API-only Applications *
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
* Not required for API-only Applications *
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
* Not required *
1.URLオプションが定義
コマンドに表示された文面通りにコードを追加。
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
2.root pathの設定
routes.rbにルーティングの設定。
root to: "home#index"
3.フラッシュメッセージの設定
ビューにフラッシュメッセージの表示のためapplication.html.erbに下記コードを追記
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
4.devise viewを追加
deviseのビューを追加するために下記のコマンドを実行。
rails g devise:views
'devise-i18n'を利用してビューを追加する際には下記のコマンドを実行します。
rails g devise:i18n:views
モデルの作成
rails g devise モデル名(user など)
db作成
dbを作成して、マイグレーションを実行
$ rails db:create
$ rails db:migrate
マイグレーションを実行して、エラーが出ることなくテーブルの作成状況が表示されたら成功です。
コントローラーの作成
コントローラーを作成して、そ子にindexアクションを用意
$ rails g controller コントローラー名 index
ログインしていない状態でアプリなどにアクセスしたときに、ログイン画面にリダイレクトするように定義します。
before_action :authenticate_user!, only: :index
def index
end
before_actionでindex メソッドが呼び出される前に「authenticate_user!」によってユーザー認証されているかどうかチェックするようにします。
deviseの機能設定
devise を利用するとユーザー管理に関する様々な機能を利用することができますが、
インストールしたままの状態だと下記の5つの機能だけを有効にするといった設定になっているはずです。
database_authenticatable | パスワード認証機能 |
registerable | ユーザー登録処理機能 |
recoverable | パスワードリセットの復元機能 |
rememberable | cookieを使用したユーザー記憶情報 |
validatable | バリデーション機能 |
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
デフォルトの状態で有効になっているdevise機能のコードの上、
コメントアウトされている部分に、オプションで設定できる機能について説明されています。
必要に応じて、追加することで使用することができます。
confirmable | 登録時メールによる認証機能 |
trackable | サインイン回数などをトラックして記録する |
lockable | 一定回数認証失敗時のロック機能 |
timeoutable | 一定時間アクセスのないアカウントのタイムアウト機能 |
omniauthable | OAuth認証などSNS連携による認証機能 |