【Rails】コントローラについて詳しく

Ruby on Railsアイキャッチ画像

アクションの前後に差し込む処理をフックという。

フックの例

class BooksController < ApplicationController
  protect_from_forgery except: [:destroy]
  before_action :set_book, only: [:show, :destroy]
  
  def show
    respond_to do |format|
      format.html
      format.json
    end
  end

  def destroy
    @book.destroy
    respond_to do |format|
      format.html { redirect_to "/" }
      format.json { head :no_content }
    end
  end

  private

  def set_book
    @book = Book.find(@params[:id])
  end
end

この中の以下部分をフック、またはフィルターと呼ぶこともある。

  protect_from_forgery except: [:destroy]
  before_action :set_book, only: [:show, :destroy]

上記の “protect_from_forgery except” の役割は、CSRF対策をOFFにするというもの。

CSRF対策とは

cross-site request forgeries の略

悪意ある第三者が用意したリンクなどをサービス利用者がクリックした際に、本人が意図しないにもかかわらずデータの削除が行われてしまう問題のこと。

RailsではGET以外のリクエストではセキュリティートークンが発行されるようになっており、そのトークンの検証により、第三者からのリクエストでないことを判定している。

“protect_from_forgery except” を記述することによって検証を行わないように制御ができる。

コメント