こんにちは、Railsエンジニアにょけん(@nyoken_box)です。
初心者の方がめちゃめちゃつまずきやすい「Strong Parameter」について、概要や設定方法をまとめました。
Strong Parametersとは
セキュリティを強固にする仕組みで、コントローラーに記述します。
なお、説明の前提として、以下4つのカラムを持つ「Userモデル」があるとしますね。
- name=「名前」
- email=「メールアドレス」
- password=「パスワード」
- password_confirmation=「パスワード(確認用)」
とりあえず、書き方を紹介しましょうか。
params.require(:user).permit(:name, :email, :password, :password_confirmation)
params
のハッシュに対し、:user
という配列の「名前」「メールアドレス」「パスワード」「パスワードの確認」の受け取りを許可し、それ以外を無効にすると記載してあります。
わけわかんないと思うので、あとで説明しますね。
主なポイントは2つです。
- データベースに登録する値に制限をかけ、セキュリティを強固にする
- 「コントローラー」にPrivateメソッドとして設定する
それぞれについて、解説していきます。
Strong Parametersでセキュリティを強固にする
以下のような画面があるとします。
Strong Parameterを設定することで、画面内の4項目以外のデータについては受け取らないようにできるんですね?
これにより、セキュリティを強固にできるわけですよ。
てか逆にStrong Parameterを設定しないと、id情報とかを書き換えられてしまう可能性があります。
どういうことか、具体的に説明しましょう。
上記画面の「Email」に関するHTMLをご覧ください。
注目してほしいのが、name="user[email]"
という部分。
Railsではこの値を受け取って、データベースに情報を登録しています。
なので、ここをname="user[id]"
とかに改変されて情報を送信されるとid情報が書き換わってしまうんですね。
他の項目についても同様のことが言えます。
だから、"user[name]"
・"user[email]"
・"user[password]"
・"user[password_confirmation]"
の4つ以外は、受け取り拒否をしないといけません。
これを実現するのが、Strong Parameterという仕組みなんですね。
Strong ParametersはコントローラーにPrivateメソッドとして設定する
Strong parameterの概要は分かっていただけたでしょうか?
では、実際に設定してみましょう。
設定する場所は、コントローラーになります。
会員登録などではdeviseを用いる機会が多いので、ここではdeviseを導入している場合を想定しますね。
※deviseのインストール・導入をしたい場合は以下を参照ください。
>>参考:deviseでユーザー登録機能を実装する3ステップ
①registrations_controller.rbを作成
まず、deviseの動作を実装しているControllerは、通常のapp/controller/
配下にはないため新たにapp/controller/registrations_controller.rb
というファイルを作りましょう。
②Strong Parameterを実装する
作成したapp/controllers/registrations_controller.rb
に以下を記述しましょう。
class RegistrationsController < Devise::RegistrationsController private def sign_up_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end
ピンク色の「private」という文字で、Privateメソッドにしています。
記述されたコントローラの内部でのみ、実行することができるメソッド。
直接ブラウザからアクセスされないものは、アクセス制御を行う「private」というキーワードを使用して設定します。
なお、privateと書いた以下の処理すべてに適用されてしまうので、通常はコントローラの一番下に書きますね。
また、青色の部分についても注意点があります。
devise関連のコントローラー機能を上書きするために、オーバーライドを行う必要があるんですね。
青色の箇所には、その処理を書いてあります。
③routes.rbにオーバーライド用の設定を追記
deviseのRegistrationsController
をオーバーライドする際には、ルーティングファイル(config/routes.rb
)に以下ピンク色の記載も必要です。
devise_for :users, :controllers => { :registrations => "registrations" }
RailsのStrong Parameterまとめ
改めてまとめます。
- データベースに登録する値に制限をかけ、セキュリティを強固にする
- 「コントローラー」にPrivateメソッドとして設定する
Twitterフォローしてね!!!
有益な無益をつぶやくよ↓↓↓
にょけん
コメント