laravel5.5でajaxでPOST通信する時のCSRFトークン

Laravel5.5にて、ajaxでPOST通信する際にCSRFトークンも送る方法のメモ。

概要

LaravelではデフォルトではPOST通信には全てCSRFトークンをつけてやる必要がある。
ajaxでの通信でも例外ではない。
なので、そのまま何も考えずにajaxを使うとそこで引っかかってしまう。

方法

方法としては(主に)2つ。

  • 送信するURLはCSRFトークンの対象外としてやる
  • ajax通信の際にもCSRFトークンを送る

もちろん後者の方が安全。

CSRFトークンの追加

HTMLのmetaタグにCSRFトークンをおいてやり、それを取得して送る。
POST送信の_tokenパラメータに入れてやるだけでよい。

1
2
3
4
5
6
7
8
9
10
11
12
13
<meta name="csrf-token" content="" />

var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');

$.ajax({
    url: '/home/upload/',
    type: 'POST',
    data: {_token: CSRF_TOKEN},
    dataType: 'JSON',
    success: function (data) {
        console.log(data);
    }
});

公式のドキュメントにも方法は載っているが、これは、Axios HTTPライブラリを使った方法?のよう。
上記でないと上手く動作しなかったが…やり方が悪いのかもしれない。

トークン対象外

一応、トークンの対象外とする方法も。

app/http/Middleware/VerifyCsrfToken.php内にて指定してやる。

1
2
3
protected $except = [
    'ajax/post/path/*',
];
   このエントリーをはてなブックマークに追加