编程语言
首页 > 编程语言> > php-Laravel 419错误-VerifyCsrfToken问题

php-Laravel 419错误-VerifyCsrfToken问题

作者:互联网

我在同一台服务器上托管了多个Laravel网站.使用我创建的最新网站,联系表单将拒绝提交,而不会引发419错误.就像其他网站一样,我已经在web.php文件中设置了路由,这些网站具有实时有效的联系表单,并且我以完全相同的方式生成和发送令牌-使用{{csrf_field()}}.

我找到了一个类似问题的答案,指出您可以通过将条目添加到app / Http / Middleware / VerifyCsrfToken.php中的$except数组来禁用Csrf检查.我已验证这确实可以解决419错误:

protected $except = [
    'contact',
    'contact*',
];

但是,当然,我希望保留Csrf功能,并且只更新了$except数组以获取故障排除值.

有谁知道新的Laravel环境尽管传递了生成的令牌仍会具有419行为,可能有什么不同?我尝试过更新许多ENV设置并切换不同的内容,但是除了修改$except数组外,没有其他任何问题.

更新

到目前为止,由于已经进行了一些讨论,因此我认为我将提供一些其他信息和代码.

首先,这是一种ajax形式,但请不要马上离开座位.我一直在测试有无ajax的表单.如果要使用ajax进行测试,只需单击与jQuery侦听器连接的按钮.如果没有,我更改或删除按钮的ID,或者运行$(“#formName”).submit();.在控制台窗口中.

上面的代码(ajax,老式提交和带有.submit();的jquery选择器)都导致完全相同的响应-419错误.

为了完整起见,这是我的ajax代码,可在我托管的所有其他网站上使用.我定义了一个postData数组以保持其整洁,并在它之后直接添加了console.log()语句以再次(再次)确认令牌生成得很好并且可以正确地与请求一起传递.

var postData = {

    name: $("#name").val(),
    email: $("#email").val(),
    message: $("#message").val(),

    _token: $("input[name=_token]").val()

};

console.log(postData);


$.post("/contact", postData, function (data) {

...

有任何想法吗?我的ENV或其他文件是否存在配置问题?

进度更新!

因为其他站点都工作正常,所以我克隆了一个旧站点,并简单地覆盖了为新网站更改的文件,然后放手!现在正在工作.进行更多的挖掘,我在网站的克隆版本与非工作版本上运行了php artisan –version,结果如下:

Working Version: Laravel Framework 5.7.3

Non-working Version: Laravel Framework 5.7.9

也许这是Laravel的错误?还是服务器上的某些软件包已过时,需要更新才能与新版本的Laravel一起使用?

解决方法:

刚刚在框架存储库中发现了您的问题.
这不是laravel问题,您的安装缺少对存储文件夹的写入权限,因此laravel无法写入会话,日志等.

您将收到419错误,因为您无法写入文件,因此无法创建sessionn,因此无法验证csrf令牌.

快速修复:chmod -R 777存储

正确的解决方法:将您的安装移至nginx / apache /您的用户实际可以写的文件夹.
如果您使用的是nginx / apache,请将您的应用移到该位置,并在项目上授予正确的权限(chown -R www-data:/ path-to-project)
如果您使用的是php artisan serve,请更改其对用户的权限:chown -R $(whoami)/ path-to-project

你明白了,让作家们写作,你就很好.

标签:csrf-protection,php,laravel,laravel-middleware
来源: https://codeday.me/bug/20191012/1900357.html