Laravel 中的 SerializableClosure 错误 - 您的序列化闭包可能已被修改,反序列化是不安全的

Posted

技术标签:

【中文标题】Laravel 中的 SerializableClosure 错误 - 您的序列化闭包可能已被修改,反序列化是不安全的【英文标题】:SerializableClosure error in Laravel - Your serialized closure might have been modified and it's unsafe to be unserialized 【发布时间】:2021-01-15 17:18:10 【问题描述】:

我在使用 laravel v8 作为网站的域中遇到此错误。

它在index file 的第 52 行显示错误:

以前我的 .env 文件没有读取。一旦我修复了这个错误,我现在就得到了这个。 请帮我解决这个错误。

【问题讨论】:

你如何解决这个问题?我遇到了同样的问题 你是如何解决这个问题的? @theodory 这是因为 .env 文件中的 App_key。因此,您可以使用 php artisan key:generate 生成密钥。如果它不起作用,您可以在 cmd 中尝试以下代码:composer run post-root-package-install 谢谢@CherylRarewings 我重新生成了密钥,一切都已修复。 【参考方案1】:

为我解决的问题是在我的项目文件夹中运行以下内容:

php artisan route:clear

我也在上述命令之前运行了以下命令,但错误仍然存​​在。只有当我执行上述操作时它才消失。作为参考,这里是我之前运行的命令:

php artisan cache:clear
php artisan config:clear
php artisan view:clear
npm run dev
php artisan key:generate

我还想指出,我正在使用以下堆栈:

Laravel v8
Jetstream
Inertia
Vue2

【讨论】:

【参考方案2】:

由于您的.env 文件中的APP_KEY 值发生更改,可能会出现此问题。

APP_KEY 用于安全数据传输,Laravel 建议将其设置为随机字符串。

APP_KEY 用于

加密 cookie。 为已签名的 URL 和排队的闭包创建签名。 使用 encrypt() 和 decrypt() 帮助程序加密值。

如果您使用与加密时相同的key,则可以解密加密的数据。

因此,如果可能,请查找备份 .env 文件并使用相同的 APP_KEY 来解决它。

【讨论】:

如果我想换一个新密钥怎么办?无论如何要清除以前的缓存内容? 加密数据也可以存储在缓存或数据库中。如果浓度是这样的,您可以删除它,您可以轻松地做到这一点,但有时它可能是您的用户使用的秘密。在这种情况下,您需要从旧加密迁移到新加密。【参考方案3】:

In vendor → .env,

APP_URL 更改为http://localhost

【讨论】:

【参考方案4】:

当我在生产中用开发中的 .env 替换我的 .env 文件时,这发生在我身上。它失败了,因为它有一个不同的 APP_KEY,所以我不得不在生产中生成一个新的 APP_KEY。

运行以下命令后解决: php工匠密钥:生成 php工匠配置:清除 php工匠路线:清除 php工匠视图:清除 php工匠配置:缓存 php工匠路线:缓存 php工匠视图:缓存

也许不需要清除视图和路线。

【讨论】:

以上是关于Laravel 中的 SerializableClosure 错误 - 您的序列化闭包可能已被修改,反序列化是不安全的的主要内容,如果未能解决你的问题,请参考以下文章

如何将控制器中的 Laravel 4.2 beforeFilter 转换为 Laravel 5.2 中的自定义中间件

为啥 laravel 中的刀片文件不显示?

1+X web中级 Laravel学习笔记——Laravel中的路由

Laravel 中的闭包是啥?

从 Laravel 中的 .env 获取 .data 到 Laravel Nova Card - vue 组件

Laravel 测试 | Laravel Artisan 命令中的模拟对象