我的注册页面正确显示表单中存在的CsrfToken({{ csrf_field() }}
)表格。
表单HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
我正在为用户使用内置身份验证。除路线和重定向外,没有任何改变。
当我提交表单时(仅在重新加载之后),它会给出页面因不活动而过期。请刷新并重试。错误。
我是一个非常小的东西。但不确定它是什么。有什么帮助吗?
更新
发现了这个问题。会话驱动程序设置为数组。将其更改为文件,错误现在消失了。 但是如果我使用数组有什么问题呢?
答案 0 :(得分:139)
如果您直接通过搜索来回答此问题,请确保已将csrf令牌添加到表单中{{ csrf_field() }}
,例如OP。
如果您将会话驱动程序设置为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。
答案 1 :(得分:70)
我在Laravel 5.5中遇到了同样的问题。在我的情况下,它发生在从GET到POST的路由更改后。问题是因为我在切换到POST时忘记传递CSRF令牌。
您可以通过调用以下方式在表单中发布CSRF令牌:
{{ csrf_field() }}
或在app / Http / Middleware / VerifyCsrfToken.php中排除您的路线
protected $except = [
'your/route'
];
答案 2 :(得分:7)
尝试所有这些。
composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
答案 3 :(得分:6)
这是因为 $var = html_escape('<iframe title="YouTube video player" width="480" height="390" src="<url>" frameborder="0" allowfullscreen></iframe>');
$this->email->message($var);
造成的
看看这段代码示例如何正确处理它:
答案 4 :(得分:4)
我的案例已由SESSION_DOMAIN
解决,我的本地计算机必须设置为xxx.localhost
。它导致与session.php配置文件中直接设置的生产SESSION_DOMAIN
,xxx.com
发生冲突。
答案 5 :(得分:3)
某些信息存储在cookie中,该信息与开发中早期版本的laravel相关。因此它与csrf生成的令牌冲突,这些令牌是由另一个版本生成的。只需清除cookie并尝试一下即可。
答案 6 :(得分:2)
对于那些仍然有问题但没有任何帮助的人。注意php.ini mbstring.func_overload参数。它必须设置为0.并且mbstring.internal_encoding设置为UTF-8。在我的情况下,这是一个问题。
答案 7 :(得分:1)
在我的情况下,该网站在服务器上很好,但在本地没有。然后我记得我在安全的网站上工作
所以在文件config.session.php中,将变量secure设置为false
'secure' => env('SESSION_SECURE_COOKIE', false),
答案 8 :(得分:1)
我更改了存储权限,错误消失了。这个问题似乎缺乏许可。
sudo chmod -R 775 storage/
答案 9 :(得分:0)
我有多个子域的应用程序和会话cookie是这些之间的问题。清除cookie解决了我的问题。
另外,尝试在 .env 文件中设置SESSION_DOMAIN
。使用您正在浏览的确切子域。
答案 10 :(得分:0)
确保在Web服务器上具有正确的系统时间。在我的情况下,流浪汉机器是在未来(1月26日14:08:26 UTC 2226)所以当然我的浏览器会话cookie中的时间已经过了大约200年以上。
答案 11 :(得分:0)
设置 mbstring.func_overload = 2
它帮助了我
答案 12 :(得分:0)
我想出了两种方法来避免这些错误 1)通过添加受保护的$ except = ['/ yourroute'],可以从定义的根目录禁用csrf令牌检查。 2)只注释\ App \ Http \ Middleware \ VerifyCsrfToken :: class内核中受保护中间件组中的行
答案 13 :(得分:0)
我遇到了同样的问题,但是问题不在框架中,而在浏览器中。我不知道为什么,但就我而言,谷歌浏览器会自动阻止Cookie。允许使用cookie后,问题得以解决。
答案 14 :(得分:0)
简短答案
在register
中为app/Http/Middleware/VerifyCsrfToken.php
添加路由条目
protected $except = [
'/routeTo/register'
];
并使用以下命令清除缓存和缓存路由:
php artisan cache:clear && php artisan route:clear
详细信息
每次访问Laravel站点时,都会生成一个令牌,即使会话尚未启动。然后,在每个请求中,将根据在SESSION_LIFETIME
文件的config/session.php
字段中设置的过期时间验证此令牌(存储在cookie中)。
如果您将网站保持打开状态超过到期时间并尝试发出请求,则将评估此令牌,并且将返回到期错误。因此,要在经过身份验证的用户无法使用的表单(例如注册或登录)上跳过此验证,可以在app/Http/Middleware/VerifyCsrfToken.php
中添加除外路由。
答案 15 :(得分:0)
以以下形式添加@csrf
并转到VerifyCsrfToken.php
app-> Http->中间件-> VerifyCsrfToken.php
protected $except = [
'paste your route here'
];
答案 16 :(得分:0)
很多次发生是因为您正在回溯测试项目
答案 17 :(得分:0)
解决方案:
使用隐身的新标签,然后再次进行测试。
原因:
在我的情况下,另一个用户使用我的管理控制台登录
答案 18 :(得分:0)
我在Linux-mint上遇到了相同的问题,但是后来意识到htdocs文件夹没有完全权限。因此,我通过执行以下操作更改了htdocs文件夹中所有子目录的权限:sudo chown -c -R $USER:$USER /opt/lampp/htdocs/*
答案 19 :(得分:0)
登录以连接到服务器。
搜索错误
发生错误:搜索为false您没有豌豆。
搜索请求更长。
答案 20 :(得分:-9)
您必须具有文件类型
laravel 中的FileName.blade.php
Ruby and Rails 中的FileName.erb.rb
并附加任何一个
{{ csrf_token() }}
<input type="hidden" name="_token" value="{{ csrf_token() }}" >
<meta name="csrf-token" content="{{ csrf_token() }}">