0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカル検証時の CSRF Token・Cookie 周りの Tips

0
Last updated at Posted at 2026-02-11

前段

現在自分は Rails 中心で開発を行っているが、ローカルで API 検証を行う際に、ログイン認証が必要な API に対して CSRF Token を指定せずに API 実行を行うと下記のエラーが発生する。

Can't verify CSRF token authenticity.

これは CSRF 対策のために必要なブロックなのだが、検証時は結構煩わしい……。

検証スキップ

そこで、まず一時的に CSRF Token の検証をスキップさせる方法がある。

class ApplicationController < ActionController::Base
+    skip_before_action :verify_authenticity_token
end

Cookie・CSRF Token の取得・設定

が、上記のように都度一時コードを差し挟んで検証をスキップさせるやり方は面倒だったので……簡単なシェルスクリプトを作った。

  • get-csrf-token.sh(サンプルコード)
#! /bin/bash

BASE_URL="http://localhost:3000"

COOKIE_VALUE=$1
COOKIE="hoge_cookie=${COOKIE_VALUE}"

echo "COOKIE: $COOKIE"

# CSRF Token 取得用 API を実行
curl -s -b "$COOKIE" \
  -H "Accept: application/json" \
  "$BASE_URL/fuga_csrf"
  • 実行
    • 引数:ログイン後、「Chrome Dev Tool / アプリケーション / Cookie」から値を取得し、引数として指定する
sh get-csrf-token.sh # Cookie の値を指定 
  • 出力例
COOKIE: hoge_cookie=54321
{"csrf_token":"12345-abcde-hoge"}
  • 上記出力された値を、環境変数に設定
COOKIE= # 出力された Cookie を指定
CSRF_TOKEN= # 出力された CSRF トークンの値を指定
  • curl で API 実行

(サンプル)

curl -s -b "$COOKIE" \
  -H "X-CSRF-Token: $CSRF_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
	-X POST "http://localhost:3000/foo/bar" \
  -d '{
    "hoge": {
      "fuga": 123
    }
  }' \
  | jq .

その他、方法:GUI ツールの活用

例えば Postman などの API 実行用の GUI ツールを使う場合。

予め UI 上に表示されている「Cookies」の項でドメイン(今回の例だと「localhost:3000」)を設定しておく。

以下サンプルのように CSRF Token 取得用の API を設定しておき、ログイン後、API 実行。
スクリーンショット 2026-02-11 18.43.58.png

すると、必要な Cookie 情報を自動で設定してくれる。
こちらの方が便利だと感じる。

[追記] なお Cookie を手動で設定する場合は、ログイン後 Developer Tool のアプリケーション/Cookie で取得した値を、Headers に Key: Cookie, Value: _your_applicaiton_name_session=hoge の形式で保存してリクエストすると良い。なお CSRF Token 取得 API でも同様に Cookie 指定が必要(同一 Token に認証済み Session を紐付けるため)。

CSRF Token 取得 API レスポンスとして受け取った値を X-CSRF-Token Header に指定して下記サンプルのように API 実行するという方法がある。

スクリーンショット 2026-02-11 18.44.34.png

直感的・かつ、少し手間が少ないので、こちらの方がやりやすいかもしれない。

なおログインの度に毎回 Header に指定する X-CSRF-Token の値を書き換えるのが面倒であれば、下記のような方法などもある模様。

以上、開発効率化のための Tips(備忘)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?