StrapiのAuthリクエストをPostmanで行うときのTips
この記事は Strapi Advent Calendar 7日目の記事です
StrapiのAPIリクエストをPostmanでする際に幸せになれるTipsを紹介します。
Strapiで作成したAPIは、設定でAuth情報付きのリクエストのみ許可する権限を付けることができますが、APIへリクエストする際には auth/local
で認証トークン jwt
を取得してから、対象のAPIに認証情報(Bearer)を付けてリクエストしなければなりません。
数回のみのテストであれば、手作業でトークンを取得してHeaderにAuth情報を付けてリクエストする方法でも問題はないのですが、何十回と時間をおいたり日をまたいで行う場合にはとても面倒な作業になってくるため、この作業をもっと楽にする方法を以下で紹介します。
TL;DR
- Postmanのenvironmentで
auth/local
のjwtを管理すると環境毎にトークンが管理できて楽 - strapiの
auth/local
の認証をPostmanのpre-request機能で各APIのリクエスト前に行うと楽 - 更にリクエストをまとめるディレクトリ自体のpre-requestに認証処理を入れると更に楽
environmentを準備
Postmanには、環境毎に変数を設定できる「environment」という機能があります。
このenvironmentに設定する値はリクエスト前後で動的に設定することができるので、それを利用して環境毎のトークンなどを管理します
environmentを作成
-
画面右上の「Manage Environments」ボタンをクリック
-
「Add」をクリック
-
Environment Nameに
api-local
のように環境変数名を入力し「Add」をクリック -
Manage Environmentsダイアログを閉じる
-
「Manage Environments」の左側にあるEnvironmentsのプルダウンから、先程追加したenvironmentを選択する(この例で言うと、
api-local
を選択する)
environmentの値を設定
先程追加したenvironmentに以下の値を追加します
VARIABLE | INITIAL VALUE | CURRENT VALUE |
---|---|---|
endpoint | http://localhost:1337 |
http://localhost:1337 |
jwt | ||
identifier | (Strapiで作成したUserのemail) | |
password | (Strapiで作成したUserのpassword) |
この段階では、endpoint
, identifier
, password
がINITIAL VALUE、CURRENT VALUEに入力されている状態にします
コレクションの作成
サイドメニューのCollections
の「+ New collection」から、今回のAPI用のコレクションを作成します
リクエストの作成
作成したコレクションのオプションメニューから「Add request」を選択し、リクエストを作成します。
リクエスト名は任意でOKです
リクエスト内容を設定
今回はGETリクエストの内容を設定するので、URL部分に
{{endpoint}}/members
と入力します。
これでSendをすると、environmentのendpointの値が適用されて
http://localhost:1337/members
にリクエストをしてくれます。
しかし、APIはAuthの制限をしているため、レスポンスは403エラーとなります
pre-requestに認証処理を設定
さて、ここからがおまじない。
pre-reqタブに以下のスクリプトを入力します。
const endpoint = pm.environment.get('endpoint')
const identifier = pm.environment.get('identifier')
const password = pm.environment.get('password')
pm.sendRequest({
url: `${endpoint}/auth/local`,
method: 'POST',
header: {'Content-Type':'application/json'},
body: {
mode: 'raw',
raw: JSON.stringify({
"identifier": identifier,
"password": password
})
}
}, function (err, res) {
console.log(res.json());
pm.environment.set('jwt', res.json().jwt)
});
これを追加することで、Strapiのauth/local apiに id/passの認証リクエストを行い、レスポンスのjwt
の値をPostmanのenvironmentのjwt
にセットする処理を、対象のAPIのリクエスト前に行ってくれるようになります。
試しにこの状態でリクエストをしてみると、APIへのリクエストは403のままですが、environmentのjwtにトークンの値が入っていることが確認できます。
(値が入っていない場合は、ID/Passが間違っている可能性があります)
Authの設定
最後にリクエストのAuth情報を設定します
Authタブを選択し、Typeを Bearer Token
、 Tokenに{{jwt}}
を入力して準備完了です。
認証リクエストをする
これでAPIへリクエストをすると、毎回APIのリクエストの前に Strapiのauth/local で取得した認証トークンをリクエストヘッダーに付けてリクエストしてくれるようになります。
これが地味に便利!
environmentの切り替え
さて、ここからは応用編です
最初にPostmanのenvironmentに api-local
というものをつくりました。
このenvironmentのは、ローカルマシンでの検証するための値を保持するために作りました。
環境を変更するには、endpoint
で設定したURLを環境毎に変えれば良いので、environmentを複製してendpointを書き換えてしまえばあっという間に異なる環境のデータセットができてしまいます。
あとはenvronmentのプルダウンから使いたい環境を選択すれば、環境の切り替えは完了です
ディレクトリに共通の認証処理を設定
Postmanには、リクエストをグループ化するディレクトリが存在しており、ディレクトリ自身にもPre-requestやAuth情報を設定することができます。
これがやばいんです。
例えば、menbersというディレクトリを作成して、ディレクトリにAuthとPreRequestを設定します。
そして、その配下に GET /members
や POST /members
、 GET /members/:id
などのリクエストを作成すると、
なんとディレクトリ配下にあるリクエストにAuthやPre-requestの情報が継承されます。
つまり、リクエスト毎にAuthの設定をしなくて済みます!
これがめっちゃ便利なので、ぜひお試しあれ。
Discussion