欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php artisan jwt:generate In BoundMethod.php line 135: Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist 有大用 有大大用

Laravel 5.5。jwt:产生问题 #1298

 关闭Milos0110 打开了这个问题 on 3 Sep 2017 ·49条评论

注释

@ Milos0110

 
 

Milos0110 评论 on 3 Sep 2017  

大家好,
我尝试运行时遇到一个问题,我php artisan jwt:generate收到反射异常,说“ [ReflectionException]方法Tymon \ JWTAuth \ Commands \ JWTGenerateCommand :: handle()不存在”

正确输入了立面和服务提供商,它们是有效的。

对于那些努力使它起作用的人,我也可以建议一种解决方案。转到位于vendor / tymon / src / Commands中的JWTGenerateCommand.php文件,并粘贴这部分代码 

public function handle() { $this->fire(); }

我知道这不是一个很好的解决方案,但它可以工作。我希望这可能会有所帮助,直到正式修复。

祝你今天愉快。

@hughsaffar
 
 
贡献者

休斯法尔 评论 on 4 Sep 2017

我猜这已经由#1255解决了

@鬼
 
 

 评论 on 5 Sep 2017

Acho quenãofoi。

@fengerwoo
 
 

fengerwoo 评论了 on 11 Sep 2017

非常感谢

@packytagliaferro
 
 

packytagliaferro 评论 on 15 Sep 2017  

我刚刚将此软件包添加到了我的Laravel 5.5项目中

作曲家:
"tymon/jwt-auth": "0.5.*"

在应用程序配置中添加了以下内容:

提供者
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,

别名

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

然后: php artisan jwt:generate

错误:

[ReflectionException]
  Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist

@hughsaffar
 
 
贡献者

休斯法尔 评论 on 15 Sep 2017

此问题的PR已合并到develop分支中。
尝试composer require tymon/jwt-auth:dev-develop --prefer-source
为服务提供商,您需要检查docs分支。

@estenger
 
 

estenger 评论 on 15 Sep 2017

@ Milos0110 public function handle() { $this->fire(); }为我工作。谢谢!

@tijanmdr
 
 

tijanmdr 评论 on 15 Sep 2017  

我认为弄乱图书馆不是一个好主意。宁可尝试

composer require tymon/jwt-auth:dev-develop --prefer-source

jwt.php从config文件夹中删除(如果已安装以前的版本)文件,然后尝试php artisan vendor:publish它将列出所有可能发布的配置。您需要选择JWT。

并更新config/app.php

  • 如果行Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class存在,请更新到Tymon\JWTAuth\Providers\LaravelServiceProvider::class

  • 否则,添加 Tymon\JWTAuth\Providers\LaravelServiceProvider::class

然后使用实现User模型JWTSubject并实现以下功能:

public function getJWTIdentifier()
{
    return $this->getKey();
}
public function getJWTCustomClaims()
{
    return [];
}

On
 
 

Onyekam 评论 on 17 Sep 2017

加法public function handle() { $this->fire(); }加法composer require tymon/jwt-auth:dev-develop --prefer-source对我没有用。我在建423

@lomholdt
 
 

隆霍尔特 评论 on 18 Sep 2017  

使用dev-develop版本对我在Laravel 5.5.4上有效。生成密钥的命令已从更改jwt:generatejwt:secret

@庞克固
 
 

Punksolid 评论 on 19 Sep 2017

我做了@tijanmdr所说的,然后jwt:secret并工作了。

@tijanmdr
 
 

tijanmdr 评论 on 19 Sep 2017  

@Onyekam之后composer require tymon/jwt-auth:dev-develop --prefer-sourcejwt.phpconfig文件夹中删除文件,然后尝试php artisan vendor:publish它将列出所有可能发布的配置。您需要选择JWT。

然后按照上述步骤操作。:)

@SwapnilEI
 
 

SwapnilEI 评论 on 20 Sep 2017

公共功能handle(){$ this-> fire(); }这对我有用。谢谢@ Milos0110 +1

@jaksm
 
 

jaksm 评论 on 20 Sep 2017

为什么不应该将fire()重命名为handle()?我做到了,一切正常。

@SwapnilEI
 
 

SwapnilEI 评论 on 20 Sep 2017  

@ jaksa-m是的。我已将重命名为fire,现在可以处理。

@jaksm
 
 

jaksm 评论 on 20 Sep 2017

我很高兴它有所帮助!

@pkitatta
 
 

pkitatta 评论 on 27 Sep 2017

fire()正常handle()工作。谢谢@ jaksa-m

@usamamuneerchaudhary
 
 

usamamuneerchaudhary 评论 on 6 Oct 2017

handle(){$ this-> fire()}对我有用。

@flxxyz
 
 

flxxyz 评论了 on 11 Oct 2017

干得好@ Milos0110

@ojasseh
 
 

ojasseh 评论了 on 14 Oct 2017

woow ..谢谢@tijanmdr这对我有用 ...

@Bonobomagno Bonobomagno 提到了这个问题 on 19 Oct 2017未定义命令“ jwt:generate”。 #50 关闭@lxiaoxiang
 
 

lxiaoxiang 评论 on 10 Nov 2017

@ Milos0110谢谢

@本村
 
 

本村 评论 on 13 Nov 2017

不要什么@tijanmdr建议,只记得试图拉的最新版本与作曲家事先取出app.php服务提供商和所有的别名。它可以100%工作。

@trollid trollid 提到了这个问题 on 24 Nov 2017[JWT] Laravel 5.5使用JWT开发 #31 关闭@genyded
 
 

genyded 评论 on 25 Jan 2018

有人会更新文档以反映这一点吗?

@ rezasys2
 
 

rezasys2 评论 on 4 Feb 2018

谢谢@ Milos0110
为什么他们没有添加此功能?并要求它!

@opannapo
 
 

opannapo 评论 on 6 Feb 2018

@ Milos0110优秀100创建handle()函数,然后执行fire()

@rezamax
 
 

rezamax 评论 on 10 Feb 2018

谢谢@ Milos0110

@rojonunoo
 
 

rojonunoo 评论 on 22 Feb 2018  

handle(){$ this-> fire()}对我有用。做了把戏!谢谢哥们上帝保佑你@ Milos0110

@rzlyp
 
 

rzlyp 评论 on 2 Mar 2018

谢谢。

@ li3007liuu
 
 

li3007liuu 评论 on 9 Apr 2018

jwt:generate调用的命令函数句柄()在新版已经没有了,在新版中的函数是fire();所以修改vendor / tymon / jwt-auth / src / Commands / JWTGenerateCommand.php文件,类中间添加语句

public function handle()
{
$ this-> fire();
}


再次运行则解决上述问题。

@ vesper8
 
 

vesper8 评论了 on 10 Apr 2018

我写了这个小命令,将所有fire()重命名为handle()。运行它之后,该命令将正常运行。

find ./vendor -type f \( -name '*Command.php' \) -exec grep -q 'fire()' {} \; ! -exec grep -q 'handle()' {} \; -print0 | xargs -0 sed -i 's@function fire(@function handle(@g'
@ImArtur
 
 

ImArtur 评论了 on 12 Apr 2018

不要搞乱外部库。只需使用dev版本作为@lomholdt提及。

@ connor11528
 
 

connor11528 评论了 on 13 Apr 2018

该文档非常清楚。请访问该网站以获取Laravel的最新版本。另外,将版本2的候选发布版本用于Laravel 5.6。

这里还有一个使用此软件包的不错的教程:https : //blog.pusher.com/build-rest-api-laravel-api-resources/

jkamphausen 推动了对参考此问题的StudyBucket / laravel-jwt的提交 on 19 Apr 2018朱利安·坎普豪森(Julian Kamphausen)Set up Tymon\JWTAuth 87eb8e9@ beaplat-61f
 
 

beaplat-61f 评论 on 22 Jun 2018

谢谢,你解决了我的问题

@deivamagalhaes
 
 

deivamagalhaes 评论 on 7 Jul 2018

开始另一个Laravel项目令人沮丧,而这仍然在dev分支上... 哭泣

@黄汉涛
 
 

黄汉涛 评论 on 17 Jul 2018

谢谢

@ islam-moneer
 
 

伊斯兰教徒 评论 on 26 Jul 2018  

由于我不喜欢搞乱软件包的源代码,并且不喜欢从develop分支中提取代码,所以我将其与许多不同的功能混淆了,因此我决定创建句柄函数,以在您运行php artisan jwt:generate命令
Run时将php artisan make:command NAME其命名并根据需要命名-您可以在应用程序/控制台/命令,然后将其打开,然后在“ handle()”函数中粘贴此部分代码,$this->fire();
用此类use Tymon\JWTAuth\Commands\JWTGenerateCommand as Command;和中提琴替换扩展类Command

@aziev
 
 

阿齐耶夫 评论 on 30 Aug 2018

@ islam-moneer这样做的时候我出错了The "show" option does not exist.

Da
 
 

Dadan93 评论了 on 5 Sep 2018

@ Milos0110谢谢,这对我有用

old
 
 

oldskool73 评论了 on 24 Sep 2018

@aziev修复了““显示”选项不存在”。,在新的命令文件中...

/**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'jwt:secret {--show}';

ahmedprog 向ahmedprog / jwt-auth添加了一个提交,该提交引用了此问题 on 6 Oct 2018@ahmedprogCreate JWTGenerateCommand.php afd7f77@ahmedprog ahmedprog 提到了这个问题 on 6 Oct 2018创建JWTGenerateCommand.php #1682 关闭@davidrtpereira
 
 

davidrtpereira 评论 on 6 Oct 2018  

要变通解决此问题,请创建一个默认类的类:
运行命令:php artisan make:command JWTGenerateCommand

查找类JWTGenerateCommand(app / Console / Commands / JWTGenerateCommand):


namespace App\Console\Commands;

use \Tymon\JWTAuth\Commands\JWTGenerateCommand as Command;

/**
 * Class Wrapper para sobrescrever o erro gerado no momento de executar o comando jwt:generate
 * @link https://github.com/tymondesigns/jwt-auth/issues/1298
 *
 * Class JWTGenerateCommand
 * @author David Pereira
 * @package App\Console\Commands
 */
class JWTGenerateCommand extends Command
{
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Metodo chamado pelo framework no momento da execucao do comando
     */
    public function handle()
    {
        $this->fire();
    }
}`

``

After, update this file: app/Console/Kernel.php
Find to attribute $commands:

`protected $commands = [
        \App\Console\Commands\JWTGenerateCommand::class,
    ];`

Save and execute command: php artisan key:generate
output: jwt-auth secret [1ih9dGbLsfCbvhWtaUYpmtH4gEQjE4wU] set successfully.

@renepardon
 
 

renepardon 评论 on 22 Nov 2018

在最新的laravel上出现相同的错误。工作解决方案是

composer require tymon/jwt-auth:dev-develop --prefer-source

其中还包括自动发现等。也许可以创建一个新版本,因为使用dev-develop ist并不是安装软件包的好方法。

@claytongf
 
 

claytongf 评论 on 3 Dec 2018

转到JWTGenerateCommand.php并替换
public function fire()

public function handle()

对我来说效果很好。

@reisdev
 
 

reisdev 评论 on 25 Dec 2018

还是个问题。我们无需更改JWTGenerateCommand.php即可使其正常运行。重命名该fire()方法可以handle()正常工作,但不需要。

@hudsontavares
 
 

hudsontavares 评论 on 16 Jan  

对于使用较新版本的Laravel(我猜为5.5+)的家伙,问题在于只需运行

composer require tymon/jwt-auth

您将获得基于0.5的版本,该版本与Laravel的最新版本在接口方面并不立即兼容(这就是为什么这么多人说重命名firehandle完成这项工作的原因)。

为了解决这个问题(假设您已经安装了jwt库)

  1. 将您的composer.json上的条目更改为 "tymon/jwt-auth": "^1.0"

  2. 跑 composer update

  3. 运行php artisan vendor:publish并提供JWT软件包的编号(在我干净的Laravel 5.7安装中,这是第8个选项)

  4. 然后你可以运行php artisan jwt:secret,以及

比修改库源代码要耗费更多精力,但是避免了这种不好的做法(修改第三者代码)。

@ b0janix
 
 

b0janix 评论 on 29 Jan

对于使用较新版本的Laravel(我猜为5.5+)的家伙,问题在于只需运行

composer require tymon/jwt-auth

您将获得基于0.5的版本,该版本与Laravel的最新版本在接口方面并不立即兼容(这就是为什么这么多人说重命名firehandle完成这项工作的原因)。

为了解决这个问题(假设您已经安装了jwt库)

  1. 将您的composer.json上的条目更改为 "tymon/jwt-auth": "^1.0"

  2. 跑 composer update

  3. 运行php artisan vendor:publish并提供JWT软件包的编号(在我干净的Laravel 5.7安装中,这是第8个选项)

  4. 然后你可以运行php artisan jwt:secret,以及

比修改库源代码要耗费更多精力,但是避免了这种不好的做法(修改第三者代码)。

这行得通,谢谢。问题是您通过“ composer require tymon / jwt-auth”获得的软件包版本。

@ajmakoni
 
 

ajmakoni 评论 2月12日

工作解决方案摘要:

  1. 作曲家需要“ tymon / jwt-auth”:“ ^ 1.0”

  2. 作曲家更新

  3. php artisan vendor:publish(选择Tymon \ JWTAuth \ Providers \ LaravelServiceProvider)

  4. PHP的工匠JWT:秘密

该解决方案的优点是您不必手动将类添加到config / app.php文件

@tymondesigns
 
 
所有者

tymondesigns 评论 3月15日

我认为现在很清楚软件包的更新版本是可行的:)

@tymondesigns tymondesigns 关闭了 3月15日@vedmant
 
 

vedmant 评论了 5月21日

所以它仍然无法正常工作?对于1.0版,它说:“您的要求无法解决为一组可安装的软件包。” 表示它还在开发中?

@ vesper8
 
 

vesper8 评论了 5月21日  

您正在使用哪个版本的Laravel @vedmant您必须具体说明在Composer中添加的版本。如果您仅添加^ 1.0,我认为它不起作用

例如,如果您使用的是Laravel 5.7,则必须添加
"tymon/jwt-auth": "1.0.0-rc.3",;如果您使用的是5.8,则必须添加"tymon/jwt-auth": "1.0.0-rc.4.1",

编辑:从头开始,经过测试,"tymon/jwt-auth": "^1.0"可以正常工作并安装最新的候选版本。至少在5.8上可以。如果作曲家告诉您您的部门有问题,则可能是由于另一个软件包造成的。在此处发布您的composer.json,我可以提供帮助

@vedmant
 
 

vedmant 评论了 5月28日

@ vesper8我使用Laravel 5.7,实际上我收到以下消息:“请求的程序包tymon / jwt-auth ^ 1.0是tymon / jwt-auth [1.0.0-alpha.2,1.0.0-alpha.3,1.0 .0-alpha1,1.0.0-beta.1,1.0.0-beta.2,1.0.0-beta.3,1.0.0-rc.1,1.0.0-rc.2,1.0.0-rc .3、1.0.0-rc.4、1.0.0-rc.4.1、1.0.x-dev],但这些与您的要求或最小稳定性冲突。”

这意味着没有稳定的1.0版本?我不会改变最低稳定度,因为它将影响其他软件包。

好的,我找到了如何安装它: composer require tymon/jwt-auth:^1.0@dev


来自 https://github.com/tymondesigns/jwt-auth/issues/1298

普通分类: