You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI/CD中Laravel 11项目‘The payload is invalid’错误求助

Laravel 11 GitLab CI/CD测试中"The payload is invalid"加密错误排查

问题背景

在Laravel 11 + React TypeScript + Inertia项目的GitLab CI/CD测试任务中,执行PHPUnit测试时触发Illuminate\Contracts\Encryption\DecryptException: The payload is invalid错误,堆栈指向Fortify双因素认证相关代码,已确认CI/CD变量中设置了APP_KEY但问题依旧。

排查与解决步骤

1. 验证APP_KEY的正确性与注入情况

  • 确保GitLab CI变量中的APP_KEY是完整的base64:...格式字符串,无多余空格、换行或截断,很多人复制KEY时容易漏掉base64:前缀,直接导致解密失败。
  • 在CI的before_script中添加输出验证:
    echo "当前APP_KEY值:$APP_KEY"
    
    查看CI日志输出的KEY是否与本地测试环境的有效APP_KEY完全一致,确认变量是否正确注入。

2. 修正环境变量的写入方式

当前通过echo追加环境变量的方式,如果.env.example中已存在APP_KEY或APP_ENV配置,会导致文件中出现重复行,Laravel会优先读取第一行,从而使用错误的KEY。建议改用sed命令直接替换对应配置:

# 替换APP_ENV为testing
sed -i 's/^APP_ENV=.*/APP_ENV=testing/' .env
# 替换APP_KEY为CI变量值
sed -i 's/^APP_KEY=.*/APP_KEY='$APP_KEY'/' .env

3. 确保配置缓存完全清除

在设置完环境变量后,执行完整的缓存清理命令,确保Laravel读取最新的.env配置:

php artisan optimize:clear

该命令会清除配置、路由、视图、编译文件等所有缓存,避免旧配置残留。

4. 检查测试用例中的数据生成逻辑

错误堆栈指向双因素认证的recovery codes再生测试,需确保测试用例中使用的用户数据是在CI环境中实时生成的:

  • 避免在测试中使用预先生成的、带有加密字段(如two_factor_recovery_codes)的用户数据(比如从本地数据库导出的种子数据),这类数据是用本地APP_KEY加密的,在CI环境无法解密。
  • 在测试的setUp方法中创建新用户,并在测试流程中完成双因素认证的开启操作,确保recovery codes是用CI环境的APP_KEY加密生成的。

5. 验证PHP加密扩展是否存在

Laravel加密依赖OpenSSL扩展,确认CI使用的php:latest镜像已安装该扩展:

# 在before_script中添加验证命令
php -m | grep openssl

如果输出为空,需安装扩展:

apt-get update && apt-get install -y php-openssl

6. 确认数据库配置一致性

当前CI配置中同时启用了MySQL服务并创建了SQLite文件,需确保.env中的数据库配置与实际使用的数据库一致:

  • 如果使用SQLite,添加以下配置到.env:
    echo "DB_CONNECTION=sqlite" >> .env
    echo "DB_DATABASE=/builds/group-kse/indupendo/database/database.sqlite" >> .env
    
  • 如果使用MySQL,需补充用户名、密码、主机配置:
    echo "DB_CONNECTION=mysql" >> .env
    echo "DB_HOST=mysql" >> .env
    echo "DB_DATABASE=test_db" >> .env
    echo "DB_USERNAME=root" >> .env
    echo "DB_PASSWORD=" >> .env
    
    避免因数据库连接异常导致数据写入错误,间接引发加密问题。

内容的提问来源于stack exchange,提问作者Klem Lloyd Mwenya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:24:51