【问题标题】:Heroku and Laravel PassportHeroku 和 Laravel 护照
【发布时间】:2018-08-26 15:22:14
【问题描述】:

我尝试在 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”不存在或不可读{“异常”:“[对象](LogicException(代码:0):密钥路径\”文件: ///app/storage/oauth-private.key\" 不存在或在 /app/vendor/league/oauth2-server/src/CryptKey.php:45)"} []

为了设置护照,我生成了密钥:

php工匠护照:安装

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

那么这个错误是什么?

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

感谢您的建议。 谢谢

多米尼克

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

【问题讨论】:

    标签: laravel heroku laravel-passport


    【解决方案1】:

    解决办法在这里: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:install
    

    【讨论】:

    • 感谢它为我工作而无需重新生成密钥。
    • 这可行,但已阅读“stackoverflow.com/questions/30639174/…”。最好走@Adebayo-Ajayi 上面发布 Passport 的配置文件然后在 Heroku 配置中添加 Passport 密钥的路线。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      然后在 Heroku 配置中设置 PASSPORT_PRIVATE_KEYPASSPORT_PUBLIC_KEY

      从这个blog找到

      【讨论】:

        【解决方案4】:

        我的解决方案非常简单:

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

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

        【讨论】:

        • 这适用于测试应用程序,但不建议用于生产应用程序,因为每个环境都需要单独的密钥。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2017-07-27
          • 2019-01-23
          • 2020-03-13
          • 2017-09-14
          • 2021-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-19
          相关资源
          最近更新 更多