必须重新生成APP_KEY,否则报“No application encryption key has been specified”错误;先用php artisan config:show app.key和grep验证密钥是否存在且为base64:44格式,再执行php artisan key:generate生成、php artisan config:clear清缓存、php artisan config:cache重载配置,并通过app('encrypter')验证生效。

迁移 Laravel 12 项目后必须重新生成 APP_KEY,否则会报 “No application encryption key has been specified” 错误,且所有加密功能(如 Session、Cookie、密码重置链接)将失效。
确认当前密钥状态
先检查是否真缺失或无效:
- 运行
php artisan config:show app.key—— 若输出为空或报错,说明未生效 - 执行
cat .env | grep APP_KEY(Linux/macOS)或type .env | findstr APP_KEY(Windows),确认是否存在且格式正确:必须是APP_KEY=base64:xxxxxxxxxx,共 44 个字符(对应 32 字节随机数据) - 避免出现
APP_KEY=SomeRandomString、带引号、空格、或用md5()/bin2hex()生成的非 base64-32 字节密钥
标准生成方式(推荐)
确保你在项目根目录(含 artisan 文件),且已安装依赖、PHP OpenSSL 扩展已启用:
- 执行
php artisan key:generate - 命令会自动生成符合 AES-256 加密要求的 32 字节密钥,并自动写入
.env的APP_KEY行 - 若提示
.env不存在,先复制.env.example并重命名为.env
生成后必须清理缓存
Laravel 12 默认启用配置缓存,旧密钥可能仍被缓存使用:
- 运行
php artisan config:clear清除配置缓存 - 如已执行过
config:cache,还需再运行一次php artisan config:cache以加载新密钥 - 验证是否生效:进入
php artisan tinker,输入app('encrypter')—— 应返回Illuminate\Encryption\Encrypter实例
安全与部署注意事项
密钥不是“设完就完”,迁移场景下需特别注意:
- 不同环境(开发/测试/生产)必须使用各自独立的密钥,严禁复用
-
.env文件禁止提交到 Git,生产服务器应通过部署脚本注入密钥,或手动配置 - 密钥变更会导致所有用户会话失效、密码重置链接作废、队列任务解密失败,需提前告知影响范围
- 生产环境建议设置
.env权限为600,防止 Web 可读


















