Heroku和Laravel护照

时间:2018-03-17 17:19:25

标签: laravel heroku laravel-passport

我尝试在heroku上安装我的应用程序。这个应用程序是一个php-laravel应用程序,带有“护照”进行身份验证。一切都在我的本地机器(mac os)中正常运行。

当我尝试用邮递员做一个简单的“帖子”时,我有这个错误:

  

2018-03-17T17:05:22.059708 + 00:00 app [web.1]:[17-Mar-2018 17:05:22 UTC] [2018-03-17 17:05:22]制作。错误:密钥路径“file:///app/storage/oauth-private.key”不存在或不可读{“exception”:“[object](LogicException(code:0):Key path \”file: /// app / storage / oauth-private.key \“在/app/vendor/league/oauth2-server/src/CryptKey.php:45中不存在或无法读取”}} []

要设置护照,我使用以下方式生成了密钥:

  

php artisan passport:安装

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

那么这个错误是什么?

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

感谢您的建议。 的Merci

多米尼克

编辑:事实上,关键文件不是在app / storage文件夹中生成的,这就是出现此错误的原因。但为什么不生成这些文件?

5 个答案:

答案 0 :(得分:5)

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

将这几行添加到"脚本"下的composer.json中。属性,然后提交并部署到heroku。

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

但是:之后你必须从表格中删除密钥" oauth-clients" ,然后使用:

重新生成这些键
  

php artisan passport:安装

它对我有用。

希望它会有所帮助。

多米尼克

答案 1 :(得分:1)

Laravel Passport具有允许将公共密钥和私有密钥设置为环境变量的配置。

您可以在本地计算机上运行php artisan vendor:publish --tag=passport-config并提交更改。

然后在Heroku配置中设置PASSPORT_PRIVATE_KEYPASSPORT_PUBLIC_KEY

从此blog

找到

答案 2 :(得分:0)

关于@Dom答案,它将在每次部署时注销您的用户,因此,如果您真正使用的是Heroku而不是Dokku(在我的情况下),我建议您使用以下命令生成密钥:php工匠护照:密钥,然后通过Nano将在storage / oauth-public.key和storage / oauth-private.key中生成的密钥复制到多行环境变量中,然后可以在composer.json中使用此安装后脚本:

  

“ post-install-cmd”:[         “ php artisan clear-compiled”,         “ chmod -R 777存储”,         “ echo -n $ OAUTH_PRIVATE_KEY>存储/oauth-private.key”,         “回显-n $ OAUTH_PUBLIC_KEY>存储/oauth-public.key”]

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

如果该解决方案不起作用,您仍然可以remove '/storage/*.key' line from .gitignore

答案 3 :(得分:0)

我的解决方法很简单:

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

在Laravel(v.7)中,默认情况下会忽略oauth键。

答案 4 :(得分:0)

从环境中加载密钥
或者,您可以使用 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