##deviseの導入手順
# Gemfile
% gem 'devise'
#ターミナル
% bundle install
# deviseの設定ファイルを作成
% rails g devise:install
# deviseコマンドでUserモデルを作成
% rails g devise user
# テーブルの設計を確認しマイグレーションファイルへ追記
% rails db:migrate
deviseでログイン機能を実装すると、ログイン/サインアップ画面が自動的に生成されますがビューファイルとしては生成されません。
これは、deviseのGem内に存在するビューファイルを読み込んでいるためです。
deviseのビューファイルに変更を加えるためには、deviseのコマンドを利用して、ビューファイルを生成する必要があります。
# deviseのコマンドで、devise用のビューファイルを生成
# deviseに用意されたビューファイルをコピーし、app/viewsの配下に配置してくれるコマンド
% rails g devise:views
サインアップ画面はapp/views/devise/registrations/new.html.erb
# ルーティングを調べる
% rails routes
% 結果
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
~省略~
new から create へ form に入力された内容を渡す(user_session POST)ため、ヘルパーメソッドのパスは下記のようになる。
サインアップ画面:app/views/devise/registrations/new.html.erb
<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>
ログイン画面はapp/views/devise/sessions/new.html.erb
ログイン画面:app/views/devise/sessions/new.html.erb
<%= form_with model: @user, url: user_session_path, id: 'new_user', class: 'new_user', local: true do |f| %>
サインアップ時に入力する情報はパラメーターとしてサーバーに送信されます。
不要な情報をうけとらないようにパラメーターを記述する必要があります。
また、デフォルトで備わってない値を送信(ここでは:nickname)も下記の方法です。
deviseのコントローラーにストロングパラメーターを反映する方法
devise_parameter_sanitizerメソッド
private
def configure_permitted_parameters # メソッド名は慣習
# deviseのUserモデルにパラメーターを許可
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
# 例
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
# 処理名
:sign_in サインイン(ログイン)の処理を行うとき
:sign_up サインアップ(新規登録)の処理を行うとき
:account_update アカウント情報更新の処理を行うとき
記述箇所:すべてのコントローラーが継承しているapplication_controller.rb
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end