1
0

ストロングパラメーターについて

Posted at

ストロングパラメーターの理解が難しいので一度整理します。

1.ストロングパラメーターとは

Web上で受け取ったパラメーター(変数)が安全かどうかを検証したうえで取得する仕組み。
安全ではない(意図しない)データの登録や更新を未然に防ぐことができる。

2.仕組み

メソッドにあらかじめ許可するカラムを指定しておく。

3.対象のデータ

ユーザーがフォームから入力した内容。
(viewから送られてきた情報)

4.対象の機能

登録・更新機能。
(コントローラー上で定義されたcreate.updateメソッド)

5.deviseを使った場合とそうでない場合を整理

deviseを使っていない場合

コントローラーにストロングパラメーターを記述。
permitメソッドを使って許可するキー(カラム名)を記述する。

user_controller.rb
private
def user_params
  params.require(:user).permit(:email, :nickname)
end

上記の場合、Userモデルに存在するemailカラムとnicknameカラムの情報を許可する。他のカラムに関しては許可しない。

deviseを使った場合

devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :name                
      t.text   :profile                    
      t.text   :position            
      t.integer :user_id
    ## 略 
  end
end

Gem内に処理が記述されているのでコントローラーを編集できないためapplication_controllerに記述する。
permit(:処理名, keys: [:許可するカラム名])
処理名にはもとから設定されているsign_in, sign_up, account_updateがある。
before_actionで各アクションの事前に処理をする記述をする。
if: :devise_controller?でコントローラーに関するアクションが処理された時に実行する設定。

application_controller
before_action :configure_permitted_parameters if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :profile])
  end
end

モデルではname,profile,positionカラムが追加されているが、今回許可されているのはnameとprofileのみとなる。
また、emailとpasswordはあらかじめ備わっているので追加する必要はない。

1
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
1
0