Sou*_*ose 96 php csrf laravel laravel-5.5
我的注册页面正确显示表单,表单中{{ csrf_field() }}存在CsrfToken().
表单HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Run Code Online (Sandbox Code Playgroud)
我正在为用户使用内置身份验证.除路线和重定向外没有改变任何东西.
当我提交表单时(仅在重新加载之后),它表示由于不活动而页面已过期.请刷新并重试.错误.
我很想念一个非常小的东西.但不确定它是什么.有帮助吗?
更新
发现了这个问题.会话驱动程序设置为数组.将其更改为文件,错误现在消失了.但是如果我使用数组有什么问题?
Dev*_*von 152
如果您直接从搜索中获得此答案,请确保您已将{{ csrf_field() }}类似OP 的csrf令牌添加到表单中.
如果您将会话驱动程序设置为file:
可能与storage_path不可写有关.如果您使用基于文件的会话,这是存储有关令牌的会话数据的位置.可以通过验证is_writable(config('session.files'))
对于OP,会话驱动程序设置为数组. 数组仅用于测试.由于数据未持久存在,因此无法在下一个请求中比较令牌.
在测试期间使用阵列驱动程序,并防止存储在会话中的数据被保留.
https://laravel.com/docs/5.5/session#configuration
检查config/sessions.php
最后,我刚刚遇到一个问题,我们有一个项目在config/session.php中有会话域和安全设置,但开发站点没有使用HTTPS(SSL/TLS).这会导致此一般性错误,因为默认情况下sessions.secure设置为true.
Hyd*_* B. 74
我在Laravel 5.5中遇到了同样的问题.就我而言,它是在将路由从GET更改为POST后发生的.问题是因为我在切换到POST时忘记传递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)
尝试所有这些.
composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Run Code Online (Sandbox Code Playgroud)
这是因为Illuminate\Session\TokenMismatchException
查看此代码示例如何正确处理它:
小智 6
我的情况解决了SESSION_DOMAIN,在我的本地机器上必须设置为xxx.localhost. 它可能会导致与生产发生冲突SESSION_DOMAIN,xxx.com这是直接设置在session.php文件的配置文件。
| 归档时间: |
|
| 查看次数: |
139373 次 |
| 最近记录: |