###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が入っていた。