Heroku和Laravel Passport

yvt65v4c  于 2023-08-06  发布在  其他
关注(0)|答案(6)|浏览(93)

我尝试在Heroku上安装我的应用程序。这个应用程序是一个PHP/Laravel应用程序,带有“Passport”身份验证。在我的本地机器(MacOS)上一切正常。
当我尝试用Postman做一个简单的'post'时,我遇到了这个错误:
2018-03-17T17:05:22.059708+00:00 app[web.1]:[2018-03 - 17 17:05:22 UTC] [2018-03-17 17:05:22]生产。错误:密钥路径“file:/app/storage/oauth-private. key”不存在或不可读{“exception”:“[object](LogicException(code:0):密钥路径“file:/app/storage/oauth-private. key”不存在或不可读/app/vendor/league/oauth2-server/src/CryptKey.php:45)"} []
为了设置passport,我生成了密钥:
php artisan passport:安装
我在Heroku的数据库里看到了钥匙因此,命令工作正常。
那么这个错误是什么呢?
我还试图重新生成密钥,停止并重新启动应用程序。没有成功。

编辑

事实上,关键文件不是在文件夹app/storage中生成的,这就是为什么会出现此错误。但是为什么这些文件没有生成呢?

bjg7j2ky

bjg7j2ky1#

解决方案如下:https://github.com/laravel/passport/issues/267
composer.json的“scripts”属性下添加以下几行,然后提交并部署到Heroku:

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

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

php artisan passport:install

z4iuyo4d

z4iuyo4d2#

关于@Dom的答案,它会在每次部署时注销您的用户,所以如果您真的使用Heroku而不是Dokku(就像我的情况一样),我建议您使用该命令生成密钥:php artisan passport:keys,然后通过Nano将storage/oauth-public.key和storage/oauth-private.key中生成的密钥复制到多行env变量中,然后您可以在composer.json中使用此post install脚本:
“post-install-cmd”:[“php artisan clear-compiled”,“chmod -R 777 storage”,“echo -n $OAUTH_PRIVATE_KEY > storage/oauth-private.key”,“echo -n $OAUTH_PUBLIC_KEY > storage/oauth-public.key”]
这将在每次部署时从ENV重新生成密钥,并保持用户登录。
如果该解决方案不起作用,您仍然可以从.gitignore中删除'/storage/*.key'行

46qrfjad

46qrfjad3#

Laravel Passport有一个配置,允许将公钥和私钥设置为环境变量。
您可以在本地计算机上运行php artisan vendor:publish --tag=passport-config并提交更改。
然后在Heroku配置中设置PASSPORT_PRIVATE_KEYPASSPORT_PUBLIC_KEY
从此blog中找到

uoifb46i

uoifb46i4#

我的解决方案很简单:
1.转到您的.gitignore文件
1.注解掉/storage/*.key
1.重新部署到heroku
看来在Laravel(v.7)中默认情况下忽略了oauth-keys

k10s72fa

k10s72fa5#

从环境中加载密钥

或者,您可以使用vendor: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-----"


Passport documentation

ewm0tg9j

ewm0tg9j6#

对于这个问题,我有一个更好的解决方案,它不需要公开密钥
1.通过终端连接到您的heroku帐户
1.运行heroku ps:exec
1.运行php artisan passport:keys

相关问题