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

Heroku部署Laravel Passport应用报错:oauth私钥文件不存在或不可读

解决Laravel Passport部署Heroku时的密钥缺失错误

这是Laravel部署Heroku时很常见的坑——本地环境你已经生成了Passport的加密密钥,但Heroku每次部署都是全新容器,默认不会保留这些文件,再加上storage目录权限可能出问题,就会触发这个"密钥路径不存在或不可读"的错误。下面给你几个实用的解决办法:

方法一:手动在Heroku上生成Passport密钥

这是最直接的操作方式,打开终端跟着步骤来:

  • 先登录Heroku账户:heroku login
  • 切换到你的项目本地目录,运行Passport安装命令:heroku run php artisan passport:install
    这个命令会在Heroku的storage目录下自动生成oauth-private.key和oauth-public.key,同时创建Passport必需的客户端记录,执行完再用Postman测试应该就能正常请求了。

方法二:自动化部署时生成密钥(推荐)

如果不想每次部署都手动操作,可以在composer.json里加一个部署后脚本,让Heroku自动处理权限和密钥生成:
打开项目根目录的composer.json,找到scripts节点,添加以下内容:

"scripts": {
    "post-install-cmd": [
        "chmod -R 775 storage",
        "php artisan passport:install --force"
    ]
}
  • chmod -R 775 storage确保storage目录有可写权限,避免密钥生成失败
  • --force参数会覆盖已有的密钥(如果之前生成过),保证每次部署的密钥都是有效的

修改完后提交composer.json到Git,再推送到Heroku,以后每次部署都会自动完成这些操作,省心很多。

方法三:将本地密钥提交到版本控制(不推荐)

这个方法只适合测试环境应急,绝对不要在生产环境用——因为Passport的私钥是敏感信息,提交到Git有泄露风险。操作步骤:

  • 打开项目的.gitignore文件,找到storage/*相关的忽略规则,把storage/oauth-private.key和storage/oauth-public.key从列表中移除
  • 提交这两个文件到Git:git add storage/oauth-*.key && git commit -m "Add Passport keys for Heroku"
  • 推送到Heroku:git push heroku main

额外排查小技巧

如果还是没解决,可以做这两项检查:

  • 确认Heroku上的APP_KEY已设置:运行heroku config:get APP_KEY,如果为空,本地生成一个php artisan key:generate --show,再用heroku config:set APP_KEY=你的密钥内容设置
  • 检查storage目录是否存在密钥:运行heroku run ls storage,看看列表里有没有oauth-private.key和oauth-public.key

内容的提问来源于stack exchange,提问作者Dom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:24:50