我是Laravel的新手,我有一个我不明白的问题.我在我的项目中有一个日志表单,我的方法是POST.当我尝试请求时,结果是:
'由于不活动,页面已过期.请刷新并重试."
但是,如果我将方法更改为GET,它可以正常工作.
有人能告诉我为什么会这样,以及如何解决它?因为我当然需要POST方法.
Eri*_*ars 162
此问题来自CSRF令牌验证失败.所以,要么你没有张贴一个,要么你发布的不正确.
它适用于GET的原因是,对于Laravel中的GET路由,没有发布CSRF令牌.
您可以通过调用以下方式在表单中发布CSRF令牌:
{{ csrf_field() }}
Run Code Online (Sandbox Code Playgroud)
或者在以下情况下排除您的路线(不建议由于安全)app/Http/Middleware/VerifyCsrfToken.php:
protected $except = [
'your/route'
];
Run Code Online (Sandbox Code Playgroud)
Man*_*ash 32
在我的情况下,我有相同的错误消息,然后发现我错过了csrf_token为表单字段添加.然后添加csrf_token.
使用表单助手,
{{ csrf_field() }}
Run Code Online (Sandbox Code Playgroud)
或者没有表格助手,
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,那么 -
刷新浏览器缓存
现在它可能会工作,谢谢.
Laravel 5.6的更新
Laravel整合了新的@csrf而不是{{ csrf_field() }}.现在看起来更好看.
<form action="">
@csrf
...
</form>
Run Code Online (Sandbox Code Playgroud)
无论何时在应用程序中定义HTML表单,都应在表单中包含隐藏的CSRF令牌字段,以便CSRF保护中间件可以验证请求.您可以使用csrf_field帮助程序生成令牌字段:
<form method="POST" action="/profile">
{{ csrf_field() }}
...
</form>
Run Code Online (Sandbox Code Playgroud)
它不起作用,然后刷新浏览器缓存,现在它可能工作,
有关详细信息,请打开链接: - Laravel 5.5中的CSRF保护
更新:
Laravel 5.6使用Blades模板,非常简单.
<form method="POST" action="/profile">
@csrf
...
</form>
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请打开链接: - Laravel 5.6中的CSRF保护
小智 6
验证您的 config/session.php 文件是否包含这一行
'domain' => env('SESSION_DOMAIN', null),
Run Code Online (Sandbox Code Playgroud)
然后删除SESSION_DOMAIN.env 文件中的行