Laravel Cloud 上的 passport 库环境变量问题 运行

Laravel passport library environment variable problem on Cloud Run

我在我的 laravel 8 项目上使用护照库,但我遇到了一个问题,因为我无法使用默认命令生成我的文件 php artisan passport:install 因为我在云端 运行无服务器,我必须使用环境变量。

所以我看到这个https://laravel.com/docs/9.x/passport#loading-keys-from-the-environment

当我通过 docker 组合发送变量并声明 APP_ENV=production 但当我 运行 在云中的生产服务器上 运行 我有这个错误:

exception: "LogicException"
file: "/app/vendor/league/oauth2-server/src/CryptKey.php"
line: 67
message: "Unable to read key from file -----BEGIN PUBLIC KEY...

我不明白为什么 passport 需要云上的文件 运行 而不是服务器环境变量。我测试过删除我的私钥和 public 中的所有回车 return 但它不起作用。也许我的 yaml 中的格式不正确?我不知道。

仔细查看您的屏幕截图后,我想我明白了证书验证失败的原因。

CryptKey.php 中,这一行 $this->isValidKey($keyPath, $this->passPhrase ?? '') 返回 false,因为您的键中缺少 \n(新行),导致 "Unable to read key from file -----BEGIN PRIVATE KEY-----..."。证书需要采用特定格式,目前使用这些环境变量并非如此。

如果可能,请更改您的机密中的这种无效格式:

-----BEGIN PRIVATE KEY-----MIIJQgIBADANBgk...-----END PRIVATE KEY-----

收件人:

-----BEGIN RSA PRIVATE KEY-----
MIIJQgIBADANBgk...
-----END RSA PRIVATE KEY-----

如果这不起作用,您也应该尝试:

  • 将证书作为文件导入,而不是使用 Secret Manager 中的文本区域
  • 或者,在文本区域中明确使用 \n

PS。我的私人证书以 -----BEGIN RSA PRIVATE KEY----- 开头,而不是 -----BEGIN PRIVATE KEY-----