Heroku 和 Laravel Passport

问题描述 投票:0回答:6

我尝试在 Heroku 上安装我的应用程序。这个应用程序是一个 PHP/Laravel 应用程序,带有用于身份验证的“护照”。在我的本地计算机(MacOS)上一切运行正常。

当我尝试使用 Postman 进行简单的“发布”时,出现此错误:

2018-03-17T17:05:22.059708+00:00 app[web.1]: [2018 年 3 月 17 日 17:05:22 UTC] [2018-03-17 17:05:22] 生产。错误:密钥路径“file:///app/storage/oauth-private.key”不存在或不可读{“异常”:“[对象](LogicException(代码:0):密钥路径“file:/// app/storage/oauth-private.key" 不存在或在 /app/vendor/league/oauth2-server/src/CryptKey.php:45)"} []

不存在或不可读

为了设置护照,我使用以下命令生成了密钥:

php artisan 护照:安装

我在 Heroku 的数据库中看到了密钥。所以命令工作正常。

那么这个错误是什么?

我还尝试重新生成密钥,停止并重新启动应用程序。没有成功。

编辑

实际上,app/storage文件夹中并没有生成关键文件,所以才会出现这个错误。但为什么这些文件没有生成呢?

laravel heroku laravel-passport
6个回答
22
投票

解决方案在这里:https://github.com/laravel/passport/issues/267

将这几行添加到“scripts”属性下的

composer.json
中,然后提交并部署到Heroku中:

"post-install-cmd": [ 
        "php artisan clear-compiled",
        "chmod -R 777 storage", 
        "php artisan passport:keys"
    ]

但是,之后您必须从表“oauth-clients”中删除密钥,然后使用以下命令重新生成这些密钥:

php artisan passport:install

2
投票

关于@Dom的答案,它会在每次部署时注销你的用户,所以如果你真的使用Heroku而不是Dokku(就像我的例子),我建议你使用该命令生成密钥: php artisan Passport :keys 然后通过 Nano 将 storage/oauth-public.key 和 storage/oauth-private.key 中生成的密钥复制到多行环境变量中,然后您可以在composer.json中使用此安装后脚本:

“安装后cmd”:[ “php artisan 清晰编译”, “chmod -R 777 存储”, "echo -n $OAUTH_PRIVATE_KEY > storage/oauth-private.key", “echo -n $OAUTH_PUBLIC_KEY > storage/oauth-public.key”]

这将在每次部署时从 ENV 重新生成密钥并让您的用户保持登录状态。

如果该解决方案不起作用,您仍然可以 从 .gitignore 中删除 '/storage/*.key' 行


2
投票

Laravel Passport 有一个配置,允许将公钥和私钥设置为环境变量。

您可以在本地计算机上运行

php artisan vendor:publish --tag=passport-config
并提交更改。

然后在 Heroku 配置上设置

PASSPORT_PRIVATE_KEY
PASSPORT_PUBLIC_KEY

从这个博客

找到

0
投票

我的解决方案非常简单:

  1. 转到您的 .gitignore 文件
  2. 注释掉/storage/*.key
  3. 重新部署到heroku

Laravel (v.7) 中默认忽略 oauth-keys


0
投票

从环境加载密钥
或者,您可以使用供应商:publish Artisan 命令来发布 Passport 的配置文件:

php artisan vendor:publish --tag=passport-config

配置文件发布后,您可以通过将应用程序的加密密钥定义为环境变量来加载它们:

PASSPORT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
<private key here>
-----END RSA PRIVATE KEY-----"

PASSPORT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
<public key here>
-----END PUBLIC KEY-----"

护照文件


0
投票

我有一个更好的解决方案来解决这个问题,不需要公开你的密钥

  1. 通过您的终端连接到您的 heroku 帐户
  2. 运行heroku ps:exec
  3. 运行 php artisan Passport:keys
© www.soinside.com 2019 - 2024. All rights reserved.