railsチュートリアル第七章 Strong Parameters


Strong Parameters

user = User.new(params[:user]) 

paramsハッシュ全体を初期化するという行為はセキュリティ上、極めて危険
この場合誰でも管理者に化けることができるため

paramsを使うのに条件をつけた。
paramsハッシュでは:user属性を必須とし、名前、メールアドレス、パスワード、パスワードの確認の属性をそれぞれ許可し、
それ以外を許可しないようにする。

params.require(:user).permit(:name, :email, :password, :password_confirmation)

:user属性でなければ、情報を確認できないようにした。
それを解決した。

class UsersController < ApplicationController
.
.
.
  def create
    @user = User.new(user_params)
    # 外部メソッドを使う
    if @user.save
      # 保存の成功をここで扱う。
    else
      render 'new'
      # 保存に成功しなければnewアクションに移動する
    end
  end

  private
  #外部から使えないようにする
  #習慣的に二つインデントを下げる

    def user_params
    # Usersコントローラの内部でのみ実行される
    # Web経由で外部ユーザーにさらされない
       params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end
end

間違ってもエラーメッセージが出てこない
かつ有効なユーザー情報を入力しても登録されない。
これから改良するらしい。

演習

1./signup?admin=1 にアクセスし、paramsの中にadmin属性が含まれていることをデバッグ情報から確認してみましょう。

--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  admin: '1'
  controller: users
  action: new
permitted: false

adminが入っていた。