在使用post或者put等方法請求時,有時會報TokenMismatchException in VerifyCsrfToken.php line 67錯誤。緣由是laravel默認開啓了防CSRF。
要解決該問題有兩種方式,一種是在請求時將token值也提交過去,另外一種是在防CSRF時排除所請求的路由
方法一:將token值傳遞過去
表單提交時:
php
<form action="photo/12" method="post"> <?php echo method_field('PUT'); ?> <?php echo csrf_field(); ?> <input type="submit" name="提交" /> </form>
使用AJAX請求時:laravel
<meta name="csrf-token" content="{{ csrf_token() }}"> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
方法二:從 CSRF 保護中排除指定 URL
好比所訪問的URL爲http://laravel.com/photo/12,如今想排除關於photo資源的路由,則在App\Http\Middleware\VerifyCsrfToken::class中添加路由以下:ajax
protected $except = [ 'photo', 'photo/*', ];
注意,方法二將沒法對photo相關路由進行CSRF防禦,因此請根據實際狀況選擇post