アプリケーションに"devise"を読み込ませる
:
gem 'devise' #追加
$ bundle install
deviseコマンドでモデル、ビュー、コントローラを作成
$ rails g devise:install
$ rails g devise User name:string #モデルの作成
$ rails db:migrate
$ rails g devise:views users #ビューの作成
$ rails g devise:controllers users #コントローラの作成
rails g devise "model名" で作成したモデルには初期値ではnameカラムが存在しない為、上記のようにカラムを同時に作成するか、migrationファイルに記述してテーブルに反映させる。
・作成されたモデル
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
デフォルトの機能
- database_authenticatable(パスワードの正確性を検証)
- registerable(ユーザー登録や編集、削除)
- recoverable(パスワードをリセット)
- rememberable(ログイン情報を保存)
- validatable(emailのフォーマットなどのバリデーション)
ルーティングの変更
...編集
devise_for :users # devise機能の使用の際にURLにusersを含むことの宣言
↓
devise_for :users, controllers: {
sessions: 'users/sessions', #usersディレクトリ下のsessionsコントローラを使用
registrations: 'users/registrations' #usersディレクトリ下のregistrationsコントローラを使用
}
上記のcontrollers: {}指定によりルーティング設定が以下のように変更される
devise/sessions#create
↓
users/sessions#create
ビューページの編集
新規登録画面に名前の入力フォームを追加
... +の部分を追加
+ <div class="field">
+ <%= f.label :name %><br />
+ <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
+ </div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
:
ログイン画面の入力フォームをemailからnameに変更
これによりemailでのログイン認証へと変更させる
...編集
:
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
↓
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>
:
コントローラの編集
...追加
before_action :configure_permitted_parameters,if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up,keys:[:name])
end
devise利用の機能(ユーザ登録、ログイン認証など)が使われる場合、その前にconfigure_permitted_parametersが実行
devise_parameter_sanitizer.permit(:sign_up,keys[:name])
= ユーザ登録(sign_up)の際のユーザ名(name)のデータ操作を許可
Strong Parametersと同様の機能
・private = 自分のコントローラ内のみで参照
・protected = 呼び出された他のコントローラからも参照可能
ログアウト機能の実装
...+部分の追加
<body>
+ <% if user_signed_in? %>
+ <%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
+ <% else %>
+ <%= link_to "新規登録", new_user_registration_path %>
+ <%= link_to "ログイン", new_user_session_path %>
+ <% end %>
:
以上
記載内容に間違い等ございましたらご指摘頂けると幸いです。
ご連絡お待ちしております。