Postman は refresh_token を使ってアクセストークンを自動更新してくれない
ので、Pre-request Script で以下のように設定すると、
毎リクエストごとに更新スべきかチェックでき、必要だったら更新してからリクエストを送れるようにする。
使えるケースは限定的です。(認証が OAuth2 のときとか)
var todayOfLastYear = new Date(new Date().getFullYear()-1, new Date().getMonth(), new Date().getDate()); // ここは適当。もし環境変数 OAuth_Timestamp に値がなければ使用される
var tokenTimestamp = pm.environment.get("OAuth_Timestamp"); // 前回 access_token を取得した日時
var expiresInTime = pm.environment.get("ExpiresInTime") || (1000 * 60 * 60) - (1000 * 60); // 前回の access_token の期限切れ日時(環境変数 ExpiresInTime がなければ 59 分で設定している。ここは自由)
var tokenDate = Date.parse(tokenTimestamp) || todayOfLastYear
if((new Date() - tokenDate) >= expiresInTime) {
pm.sendRequest({
url: pm.variables.get("Auth_Url"),
method: 'POST',
header: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: {
mode: 'urlencoded',
urlencoded: [
{key: "grant_type", value: "refresh_token", disabled: false},
{key: "refresh_token", value: pm.environment.get("refresh_token"), disabled: false},
{key: "client_id", value: pm.environment.get("client_id"), disabled: false},
{key: "client_secret", value: pm.environment.get("client_secret"), disabled: false}
]
}
}, function (err, res) {
pm.environment.set("access_token", res.json().access_token);
pm.environment.set("OAuth_Timestamp", new Date());
if(res.json().expires_in){
expiresInTime = res.json().expires_in * 1000 - 60000; // res の expires_in から 1 分引いた時間にしている
}
pm.environment.set("ExpiresInTime", expiresInTime);
});
}
↧