【问题标题】:Jwt configuration file not published after installation安装后未发布 Jwt 配置文件
【发布时间】:2017-10-05 19:43:13
【问题描述】:

我使用官方存储库jwt-auth installation wiki 上的说明将 jwt 添加到了我的 Laravel 应用程序中。安装成功(即在运行作曲家更新之后)。在那个阶段,我只需要将 jwt 添加到服务和别名数组并运行发布命令来发布配置文件。

使用

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

上面的命令运行并显示Publishing complete 但是这不是预期的行为,我希望它显示生成的配置文件 jwt.php 的名称。情况并非如此,正如预期的那样运行下一个命令

php artisan jwt:generate

返回和错误

[Symfony\Component\Console\Exception\CommandNotFoundException]  
  There are no commands defined in the "jwt" namespace.  

我猜那是因为 jwt.php 配置文件不存在,我在这里缺少什么?提前致谢。

【问题讨论】:

    标签: php laravel jwt laravel-5.4


    【解决方案1】:

    我在解决问题几天后发布此答案,因为没有答案出现。 经过一些研究,我发现尽管安装正确,但配置文件可能无法发布的主要原因是由于添加新配置时config:cache 中的混淆。但是我通过运行解决了这个问题

    php artisan config:clear
    

    然后再次运行发布命令并繁荣!有效。此方法不仅适用于 JWT,还适用于其他无法发布的配置,但请注意,问题也可能是由其他原因引起的。

    【讨论】:

    • @geoidesic 你能提供更多关于你自己的行为的细节吗?这可能会帮助我们找到解决方案。
    • @ F.E Noel Nfebe – 我认为这是因为 JWT 未包含在 composer.json 中。但是由于依赖地狱,我无法安装 JWT。
    • @geoidesic 如果您最终解决了问题,请务必添加答案和描述,以便越来越多的人获得帮助。
    • @F.E Noel Nfebe 我还没有解决问题。我不认为它是可解决的,因为存在无法解决的依赖关系。
    【解决方案2】:

    我遇到了同样的问题。以下对我有用:

    php artisan config:clear
    
    php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class"
    
    php artisan config:cache
    
    php artisan vendor:publish
    

    【讨论】:

      【解决方案3】:

      要在 laravel 中安装 tymon/jwt-auth 包,应遵循以下步骤:

      Composer.json 要求应该是这样的:

      "require": {
             "php": ">=5.5.9",
             "laravel/framework": "5.1.*",
             "tymon/jwt-auth": "0.5.*"
         },
      

      然后在 config/app.php 中将以下内容放入 providers 数组中:

      Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
      

      然后在 config/app.php 的 aliases 数组中添加以下内容

      'JWTAuth'   => Tymon\JWTAuthFacades\JWTAuth::class,
      'JWTFactory' => Tymon\JWTAuthFacades\JWTFactory::class
      

      然后键入以下命令:

      php artisan vendor:publish
      

      注意:各种教程会建议您执行以下操作:

      php artisan vendor:publish --provider="Tymon\JWTAuthProviders\JWTAuthServiceProvider"
      

      但是,在此之前,请尝试不带 --provider 的上述命令,它会起作用。

      然后输入:

      php artisan jwt:generate
      

      在这一步之后,您可以在app/config/jwt.php 中验证生成的密钥,如下所述:

      'secret' => env('JWT_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'),
      

      现在,你可以走了……

      【讨论】:

        【解决方案4】:

        对于流明 5.5.*

        $ composer require tymon/jwt-auth:"^1.0.0"
        

        在 app/Providers/AppServiceProvider.php 注册方法中添加打击代码:

        $this->app->register(\Tymon\JWTAuth\Providers\LumenServiceProvider::class);
        

        【讨论】:

          【解决方案5】:

          对于 laravel 5.5 及更高版本,安装 jwt 版本 1.0.0-rc.1 效果很好,您不需要在服务提供商中注册 jwt 类,只需使用 composer 即可:

          composer require tymon/jwt-auth:1.0.0-rc.1
          

          之后你就可以发布了。

          【讨论】:

            【解决方案6】:

            在providers部分下的bootstrap/app.php文件中添加如下sn-p如下:

            // Uncomment this line
            $app->register(App\Providers\AuthServiceProvider::class);
            
            // Add this line
            $app->register(Tymon\JWTAuth\Providers\LumenServiceProvider::class);
            

            然后在同一个文件中取消注释 auth 中间件:

            $app->routeMiddleware([
                'auth' => App\Http\Middleware\Authenticate::class,
            ]);
            

            【讨论】:

              【解决方案7】:

              如果您的 laravel 版本是 5.8,请参考 this 文档。

              对于 5.8,您必须首先生成密钥。

              $php artisan jwt:secret

              然后添加 JWTAuth 提供者。

              $php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

              【讨论】:

                猜你喜欢
                • 2020-01-01
                • 2019-05-29
                • 1970-01-01
                • 1970-01-01
                • 2020-03-10
                • 2014-06-05
                • 2017-08-12
                • 2018-09-02
                • 2015-04-03
                相关资源
                最近更新 更多