gem 'devise' の使い方を復習していく。
'devise'のgemはrailsでログイン機能を簡単に実装するためのgem。
Gemfileを以下の様に編集
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
# 省略
gem 'devise' #最終行に追記。
$ pwd
ディレクトリを確認する。$ bundle install
Gemfileに追記したdeviseをインストール。
*ログに(Installing devise 4.7.0)みたいなのが出ていればインストールできている。
ローカルサーバーの再起動
control + C
で一度サーバー終了$rails s
で再度サーバー起動
deviseの設定ファイル作成
deviseの使用するためには、Gemのインストールと専用コマンドを使用して
設定ファイルを作成する必要がある。
$rails g devise:install
設定ファイルの作成
新規作成されるファイル
• config/initializers/devise.rb
• config/locales/devise.en.yml
deviseの機能を持ったモデルの作成
モデルの作成には通常のコマンドではなく、deviseのモデルを作成する
専用のコマンドを使用してモデルを作成する。
$ rails g devise user
userモデルを作成する。
新規作成されるファイル
• app/models/user.rb
• test/fixtures/users.vml
• test/models/user_test.rb
• db/migrate/20XXXXXXXXXXXX___devise_create___users.rb
config/routes.rbに下記の様な記述が自動的に追記される。
Rails.application.routes.draw do
devise_for :users #この部分が追記される
# 省略
$ rails db:migrate
usersテーブルの作成。
Viewの作成
deviseでログイン機能を実装するとuser_signed_in? メソッド
が使用できる。
ユーザーがサインインしている時はtrue
を返して、サインインしていない時はfalse
を返す。
user_signed_in? メソッド
を使用して、ログイン・新規登録・ログアウトボタンを作成していく。
<% if user_signed_in? %>
# ログインしている時の処理
<% else %>
# ログインしていない時の処理
<% end %>
下記の様にボタンを適当なviewに追記。
<div class="header">
<% if user_signed_in? %>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "header__btn" %>
<% else %>
<%= link_to "ログイン", new_user_session_path, class: "header__btn" %>
<%= link_to "新規登録", new_user_registration_path, class: "header__btn" %>
<% end %>
</div>
次にdevise用のviewを作成する。
$ rails g devise:views
専用コマンドでログイン画面・新規登録画面が作成される。
新規作成されるファイル
• app/views/devise以下のディレクトリにある各種ビューファイル。
新規登録画面: app/views/divise/registrations/new.html.erb
ログイン画面: app/views/devise/sessions/new.html.erb
再度ローカルサーバーを再起動して動作確認して終了。
configure_permitted_parameters メソッド
deviseはデフォルトで、メールアドレス・パスワードしか受け取れない様にストロングパラメーターが設定されている。
configure_permitted_parameters メソッド
を設定して、追加のパラメーターを許可しなければならない。
つまり、初期状態だと新規登録画面でメールアドレスとパスワードしか登録できない。
ニックネームやその他の情報を登録したかったら設定をいじる必要がある。
ニックネームを登録できる様にする
まずはusers テーブルにnicknameカラムを追加する。
$ rails g migration AddNicknameToUsers nickname:string
$ rails db:migrate
新規登録画面で nickname を登録できる様にする。
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
# 以下を追記
<div class="field">
<%= f.label :nickname %><br />
<%= f.text_field :nickname, autofocus: true %>
</div>
# 省略
configure_permitted_parameters メソッドの設定
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end