【Ruby on Rails】Strong Parameterの仕組みと基本的な使い方は? – にょけんのボックス

プログラミング
スポンサーリンク

 

こんにちは、Railsエンジニアにょけん(@nyoken_box)です。

初心者の方がめちゃめちゃつまずきやすい「Strong Parameter」について、概要や設定方法をまとめました。

 

 

Strong Parametersとは

セキュリティを強固にする仕組みで、コントローラーに記述します。

なお、説明の前提として、以下4つのカラムを持つ「Userモデル」があるとしますね。

  1. name=「名前」
  2. email=「メールアドレス」
  3. password=「パスワード」
  4. password_confirmation=「パスワード(確認用)」

とりあえず、書き方を紹介しましょうか。

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

paramsのハッシュに対し、:userという配列の「名前」「メールアドレス」「パスワード」「パスワードの確認」の受け取りを許可し、それ以外を無効にすると記載してあります。

わけわかんないと思うので、あとで説明しますね。

主なポイントは2つです。

<strong>Strong Parameterのポイント</strong>
  1. データベースに登録する値に制限をかけ、セキュリティを強固にする
  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のインストール・導入方法は?

>>参考: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」というキーワードを使用して設定します。

なお、privateと書いた以下の処理すべてに適用されてしまうので、通常はコントローラの一番下に書きますね。

 

また、青色の部分についても注意点があります。

devise関連のコントローラー機能を上書きするために、オーバーライドを行う必要があるんですね。

青色の箇所には、その処理を書いてあります。

 

③routes.rbにオーバーライド用の設定を追記

deviseのRegistrationsControllerをオーバーライドする際には、ルーティングファイル(config/routes.rb)に以下ピンク色の記載も必要です。

  devise_for :users, :controllers => {      :registrations => "registrations"    }  

 

スポンサーリンク

RailsのStrong Parameterまとめ

改めてまとめます。

Strong Parameterのポイント
  1. データベースに登録する値に制限をかけ、セキュリティを強固にする
  2. 「コントローラー」にPrivateメソッドとして設定する

 

Twitterフォローしてね!!!

有益な無益をつぶやくよ↓↓↓

にょけん

スポンサーリンク

Visited 96 times, 1 visit(s) today

コメント

タイトルとURLをコピーしました