0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[memo]deviseの導入方法

Posted at

##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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?