使用laravel提交POST请求时,出现“419 Page Expired”错误,如下图
laravel规定,任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 CSRF 令牌(CSRF token),否则,这个请求将会被拒绝
也就是说,提交POST、PUT等时,需要一个合法字符串做安全验证
解决办法:
1、加上 CSRF token
<'form method="POST" action="profile">
{{ csrf_field() }}
...
<' /form>
2、也可以最新写法
<'form method="POST" action="profile">
@csrf
...
<' form>
如果是AJAX提交,在页面头部加上csrf-token:
提交headers中增加 X-CSRF-TOKEN:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
也可以在指定页面移除CSRF保护(相对不安全):
/app/Http/Middleware/VerifyCsrfToken.php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware{
/**
* 从 CSRF 验证中排除的 URL
*
* @var array
*/
protected $except = [
'alipay/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}