Laravel 8 - 随机获取“未指定应用程序加密密钥”

Jan*_*nne 5 php rest caching laravel

请尝试阅读并回答所提出的问题,而不是建议对公共路由进行改进,而这并不是偶然的。


编辑#5(更新@2021年10月20日)不幸的是,这个问题仍然没有答案。我真的对此感到困惑,但更重要的是,过去几天没有出现此错误,我不知道发生了什么。

我曾经有自定义静态“User::hasRole(['...']”方法,每次检查角色时都会获取用户 userRoles。我所做的最大更改是将用户角色缓存到会话中,这样就不会出现每次都需要获取它们(因为数十个剩余查询指的是作为查询构建器过滤器的一部分一遍又一遍地检查数据库中的角色)。

$userRoles = Session()->get('userRoles', function() {
    $user = User::with(['userRoles'])->find(Auth::user()->id);
    Session()->put('userRoles', $user->userRoles);
    return $user->userRoles;
});
Run Code Online (Sandbox Code Playgroud)

我知道这个解决方案可能会在某些时候引起问题,但由于我的项目的性质,它几乎不存在风险。

这些随机错误似乎从来没有指向某种特定的方法,也没有任何东西指向这个方向。看起来这个错误仍然是一个谜,但目前它不再引起问题。我能猜测到的最好情况是,并行的 PHP/SQL 线程太多,这会导致内核管道在身份验证失败时在随机状态下失败。

感谢所有试图提供帮助的人。

编辑#4(更新@ 14.9.2021)将缓存驱动程序从文件更改为阵列并不能解决问题。即使用户已通过身份验证,单个端点也仅返回“未经身份验证”消息。

编辑#3,问题仍然存在,尝试总结:

  • 密钥已生成,甚至重新生成多次
  • Laravel 8、XAMPP
  • 已多次运行 config:cache 。如果配置缓存已被清除,则问题会更频繁地发生,但目前可能有 1/100-200 个 REST 调用或多或少随机地最终失败。这不会发生在 LAMP 生产服务器上。
  • 此问题会导致随机不同的错误,所有错误都与用户会话有关
  • 没有应用程序加密密钥
  • 401 - 未经身份验证
  • SQL 连接错误(尽管刷新页面/重新运行帖子就像一个魅力,并且单页加载上的约 20 个 REST 操作中只有 1 个可能最终会达到此状态)。
  • 似乎不是 CSRF 令牌相关的错误,因为会话处于活动状态(因为其他 REST 调用没有失败),但由于某种原因,每当发生此错误时,Axios 不会在响应标头上报告 XSRF 令牌。令牌存在于请求标头中...看起来后端仍然无法找到会话?
  • 目前使用基于文件的会话处理,将尝试基于内存

--

我一直遇到 Laravel 生成 HTTP 代码 500 的问题 - “未指定应用程序加密密钥” - 在我的休息路由上随机出现错误。当然,我已经设置了,甚至用 Artisan 重置了密钥,所以这不应该是问题。

自从我在 Laravel 6 上开始我的项目以来,这个问题就一直存在。很快我就能够跟踪缓存问题。基本上,当使用“php artisan cache:clear”擦除缓存时,REST 路由开始失败,大约占所有请求的 5%。当使用“php artisan config:cache”再次生成缓存时,问题得到解决。由于某种原因,当缓存被擦除时, .env 变量似乎没有注册或正确读取?不过,在开发和配置缓存时这不是问题。

我已将我的项目从 Laravel 6 升级到 8,现在看来这个问题已经开始重现,但我无法找到原因。

我的应用程序有大约 10-20 个初始原子 REST 端点访问,用于为 Vue SPA 初始化提供基本信息。所有这些请求都是异步发生的,并且时不时地(可能每 10 个页面刷新/重新初始化一次)其中一个调用可能会失败。

通过最新的 XAMPP 运行。不使用 XDebug 或任何其他可能阻止调用的东西。想知道其他人是否也遇到过这个问题?

编辑:

此外,我可能会收到非常随机的“401 - 未经身份验证”错误。该问题与应用程序密钥错误非常相似。例如,这张照片是在网络浏览器上从一个页面跳转到另一个页面时大约 20 分钟的活动后拍摄的。之前和之后的所有其他呼叫也都经过身份验证,但这个 401 不知从何而来。

在此输入图像描述

编辑2:

更改彩票号码并没有解决。

小智 -1

看来您错误地定义了应用程序的根目录..配置您的网络服务器,以便根目录是

/path/to/your/laravel/application/public
Run Code Online (Sandbox Code Playgroud)

注:/public位于最后