私はLaravel 5.4 and JWT Auth ライブラリをAPI開発のユーザー認証に使用しています。インストール後php artisan jwt:generate
それから私にエラーをスローします
Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist
私が欠けているものはありますか?
このエラーは通常、jwtパッケージをlaravel 5.5バージョンでインストールした後、サービスプロバイダーを設定して次のコマンドを実行した後に表示されます。
php artisan jwt:generate
次に、ターミナルでこのエラーメッセージが表示されます。
それを解決する方法は?簡単なこのステップに従ってください
ステップ-1パッケージを再インストールします
composer require tymon/jwt-auth:dev-develop --prefer-source
この開発バージョンでは、このエラーが修正されました。
ステップ-2サービスプロバイダーの設定
'providers' => [
....
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class to
Tymon\JWTAuth\Providers\LaravelServiceProvider::class
],
ステップ-3キーを生成します
php artisan jwt:secret
私はここからこの解決策を見つけました https://laravelcode.com/post/method-tymonjwtauthcommandsjwtgeneratecommandhandle-does-not-exist
Vendor/tymon/src/CommandsにあるJWTGenerateCommand.phpファイルに移動してこのメソッドを貼り付けます
public function handle() { $this->fire(); }
ベンダーフォルダ内の何かを変更することは決して素晴らしい考えではありませんが、これに対処する方法は2つあります...
自分でランダムな文字列を生成し、JWT構成ファイルの値を変更するだけです。
Tymon\JWTAuth\Commands\JWTGenerateCommandに移動し、fireメソッドを処理するように変更します。
指定されたファイルパスに移動します
ベンダー/タイモン/jwt-auth/src/Commands/JWTGenerateCommand.php
関数名を変更する
public function fire()to public function handle()
コマンドを実行します:
php artisan jwt:generate
このエラーで何度もクラッシュしたため、この回答を公開しています。
Laravel 5.6で動作することがわかった唯一の解決策は次のとおりです。
run composer update
に追加しますconfig/app.php
を開き、以下を追加します。config/app.php:
'providers' => [
/*
* JWT Service Provider...
*/
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
'aliases' => [
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
],
実行:
php職人ベンダー:publish--provider = "Tymon\JWTAuth\Providers\LaravelServiceProvider"
最後に、次を実行します:php artisan jwt:secret
その後、ログインのためにエンドポイントに到達すると、次の例外が発生しました。
Class Tymon\JWTAuth\Providers\JWT\NamshiAdapter does not exist
これは次の方法で修正されました。
config/jwt.php
を開き、以下を変更します。config/jwt.php:
'jwt' => Tymon\JWTAuth\Providers\JWT\Namshi::class,
'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,
'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
最後に、ユーザーモデルを機能させるには、次のように定義する必要があることに注意してください。
class User extends Authenticatable implements JWTSubject
{
...
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
...
}
このパスでfire()関数をhandle()に変更しますvendor/tymon/jwt-auth/src/commands/JWTGenerateCommand.php
私は1つの解決策をアドバイスすることができます。 vendor/tymon/src/CommandsにあるJWTGenerateCommand.phpファイルに移動し、コードのこの部分を貼り付けますpublic function handle(){$ this-> fire(); }
私はこれがエレガントな解決策ではないことを知っていますが、それは機能します。公式の修正が到着するまで、これが役立つことを願っています。