環境
- Laravel 5.8
- Passport 7.3
- Vue.js 2.6.10
問題
Vue.jsのaxiosを使用してAPI通信をする際、認証機能としてPassportを使用しました。
取得したトークンをリクエストのヘッダーに追加して非同期通信をしてもらいたく書いたコードがこちら
axios.get(
APP_URL,
{
headers: {
"Content-Type": "application/json",
"Authorization": 'Bearer ' + token
}
},
).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
}
);
GET通信はこれでうまくいきました。
しかし、これをそのままPOST通信に変えると途端に401エラー、つまりは認証失敗になってしまいます。
解決策
headersにいれるときの書き方を変えるとうまくいきます
axios.defaults.headers.common['Authorization'] = "Bearer " + token;
axios.post(
APP_URL,
{
headers: {
"Content-Type": "application/json"
}
},
).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
}
);
残った疑問
ただheaders
にいれるだけではなく、axios.defaults.headers.common
を介さないとだめな理由がわかりませんでした
bootstrap.jsで記述されてる例もありましたが、トークンが変わるときとか大丈夫なんでしょうか
そのあたりお詳しい方コメントいただけると幸いです