Laravel 8随机出现未指定应用加密密钥、401未认证等错误问题求助
请优先阅读并回答所提问题,不要建议优化公共路由,该路由设置是有意为之,绝非意外。
遗憾的是问题仍未得到解答,我对此十分困惑,更奇怪的是过去几天这个错误再也没有出现,我完全不知道是什么原因导致的。
我之前自定义了静态方法User::hasRole(['...']),每次校验角色时都会查询用户的userRoles。我做的最大改动是将用户角色缓存到session中,避免每次都要查询数据库(因为数十个rest请求作为查询构造器过滤器的一部分,需要反复从DB校验角色)。
$userRoles = Session()->get('userRoles', function() { $user = User::with(['userRoles'])->find(Auth::user()->id); Session()->put('userRoles', $user->userRoles); return $user->userRoles; });
我知道这个方案在某些场景下可能存在问题,但结合我的项目属性,该风险几乎可以忽略。
这些随机报错从未指向某个特定方法,也没有线索指向角色缓存的方向。看起来这个问题会一直是个谜,但目前它已经不再引发故障了。我猜测最大的可能是并行PHP/SQL线程过多,某种情况下导致内核管道随机失败,出现认证异常。
感谢所有尝试提供帮助的人。
将缓存驱动从file改为array没有解决问题,某个端点直接返回"unauthenticated"提示,即便用户处于已认证状态。
- 密钥已经生成,甚至多次重新生成过
- 运行环境为Laravel 8、XAMPP
- 已多次执行
config:cache命令。如果清除配置缓存,问题出现频率会更高,当前约每100-200次REST请求会随机失败1次,该问题不会在LAMP生产服务器上出现 - 该问题会随机引发不同报错,全部与用户会话相关
- 未指定应用加密密钥
- 401 - unauthenticated
- SQL连接错误(刷新页面或重新发起POST请求就能正常运行,单页加载的约20次REST请求中可能仅1次出现该问题)
- 看起来不是CSRF-token相关错误,因为会话处于活跃状态(其他REST请求没有失败),但出现错误时Axios的响应头中没有XSRF-token,请求头中是存在该token的…看起来还是后端无法找到对应会话?
- 当前使用文件式会话存储,后续将尝试内存式存储
我遇到的问题是Laravel的rest路由随机返回500错误,提示"No application encryption key has been specified"。我当然已经通过Artisan设置甚至重置过密钥,所以这不是问题根源。
这个问题从我使用Laravel 6启动项目时就一直存在,我很快就定位到问题和缓存相关:使用php artisan cache:clear清除缓存后,约5%的REST请求会失败;使用php artisan config:cache重新生成缓存后问题就会解决。看起来清除缓存后.env变量没有被正确注册或读取?不过开发阶段配置好缓存后就不会出现该问题,所以之前没太在意。
我将项目从Laravel 6升级到8后,这个问题再次出现,我找不到引发问题的原因。
我的应用在Vue SPA初始化时会并行请求10-20个原子REST接口获取基础信息,所有请求都是异步发起的,偶尔(大概每10次页面刷新/重新初始化就会出现1次)其中某一个请求会失败。
运行环境为最新版XAMPP,没有使用XDebug等可能阻塞请求的工具,想问下有没有其他人遇到过同样的问题?
除此之外我还会遇到随机的"401 - unauthenticated"错误,问题表现和应用密钥错误高度相似。比如这张截图是我在浏览器中跳转页面操作20分钟左右出现的,前后所有其他请求也都是需要认证的接口,只有这单个请求无缘无故返回401。
修改lottery参数没有修复问题。
内容的提问来源于stack exchange,提问作者Janne

