🔒
PostmanでCSRFトークンを使う時はPre-request Scriptが便利だった話
PostmanでAPIの実装とドキュメント作成を行っていると、CSRFトークンをヘッダーに設定する必要がある場面があると思います。
その際に、Pre-request Scriptを使うと毎回手動でセットする必要がなく、便利だったので、その方法を紹介します。
TL;DR
コレクションのPre-request Scriptに以下のスクリプトを記述することで、CSRFトークンを自動的に環境変数に設定し、その値をヘッダーにセットするという話です。
// CSRFトークン取得用のエンドポイントからトークンを取得
// この場合は環境変数からURLとポートを取得して組み立てている
const url = `${pm.environment.get('APP_URL')}:${pm.environment.get('APP_PORT')}/auth/csrf`;
// CSRFトークン取得のリクエストを送信
pm.sendRequest({
url: url,
method: 'GET'
}, (err, res) => {
if (err) {
console.log('Error fetching CSRF token:', err);
}
const csrfToken = res.json().csrfToken; // ここはレスポンスの形式の応じて設定
pm.environment.set('csrf_token', csrfToken); // Postmanの環境変数を更新
});
Pre-request Scriptとは?
Postmanのリクエストを送信する前に実行されるスクリプトです。
エンドポイント単位でも、コレクション単位でも設定できます。
エンドポイントごとの設定箇所
コレクションごとの設定箇所
設定するスクリプトの内容
以下のスクリプトをPre-request Scriptに記述することで、CSRFトークンを取得して環境変数に設定してしまいます。
この場合、csrf_token
という環境変数にトークンを設定しています。
設定したら保存することを忘れずに。
// CSRFトークン取得用のエンドポイントからトークンを取得
// この場合は環境変数からURLとポートを取得して組み立てている
const url = `${pm.environment.get('APP_URL')}:${pm.environment.get('APP_PORT')}/auth/csrf`;
// CSRFトークン取得のリクエストを送信
pm.sendRequest({
url: url,
method: 'GET'
}, (err, res) => {
if (err) {
console.log('Error fetching CSRF token:', err);
}
const csrfToken = res.json().csrfToken; // ここはレスポンスの形式の応じて設定
pm.environment.set('csrf_token', csrfToken); // Postmanの環境変数を更新
});
リクエストのヘッダーにCSRFトークンを設定する
最後に、CSRFトークンが必要なリクエスト(POST
, PUT
, DELETE
など)のヘッダーに環境変数に設定したトークンをセットするように設定しておきます。
ヘッダーの設定箇所
まとめ
Pre-request Script
は便利ですね。ほかにも便利な使い方があればぜひコメント欄で教えてください。
Discussion