この記事は更新から2年以上経過しています。情報が古い可能性がありますのでご注意下さい。
発生した問題
Vue.jsの”axios.post”でデータ送信時、ステータスコード”419″が返される。
JavaScript
let params = {
name : 'bar',
}
axios.post('/foo', params)
.then(function(response){
})
.catch(function(error){
});
原因
CSRF対策の為のトークンが一致していない。
対処法
viewの何処かにトークンを出力し、そこからJavaScriptで取得してaxiosのヘッダーにセットする。
(viewに直接JavaScriptを書いているなら、CSRFを直接出力するよう書いても良い)
Laravelに初期で入っている共通viewである”app.blade.php”を読み込んでいるならば、metaタグに出力されている。
View
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
JavaScript
let params = {
name : 'bar',
}
axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
};
axios.post('/foo', params)
.then(function(response){
})
.catch(function(error){
});
参考文献
https://error-search.com/error-post/detail/283/Laravel5.5%2BAjax%25E3%2581%25A7419%25E3%2582%25A8%25E3%2583%25A9%25E3%2583%25BC%25E3%2581%258C%25E8%25BF%2594%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%258F%25E3%2582%258B

【Vue】axiosで、デフォルトでCSRFトークンを設定できるようにする - Qiita
VueとRailsで開発していると, axiosでPOSTリクエスト等を送ったときに以下のエラーが出るかと思います。 422 (Unprocessable Entity) csrfトークン対策しなければならないのですが、エラーを防ぐ方法はい...