概要
Laravel(とLumen)にJSONによる認証の仕組みを簡易的に導入するためのライブラリである、JWTAuth(tymondesigns/jwt-auth)を導入した際に以下のエラーに詰まったのでその解決方法の備忘録
$ php artisan jwt:generate In BoundMethod.php line 135: Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist
前提
以下環境で動作確認
debian | 8.6 |
PHP | 7.0 |
Laravel | 5.5 |
composer | 1.2.0 |
問題点
Laravel 5.4 と Vue.js 2.2 と JWTAuth で、ログインできる SPA アプリケーションのチュートリアル その4 – Qiita に沿って、Laravel + Vue + JWTAuthで、SPAによるログイン機能を実装しようとしていた所、jwt:generateを実行する所で以下のエラーが発生した。
$ php artisan jwt:generate In BoundMethod.php line 135: Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist
比較的新しい情報の通りに進めて躓くと辛いなと思いながら、頑張って原因を調べて解決した。
解決方法
バージョン互換性問題かはハッキリわからなかったが、このエラーが出る問題は、新しい開発版のtymon/jwt-authパッケージで解決されている。よって、以下のコマンドで開発版をインストールする。
composer require tymon/jwt-auth:dev-develop --prefer-source
バージョンアップに伴い、サービスプロバイダの設定も書き換える必要がある。config/app.phpの該当箇所を以下のように書き換える。
変更前
'providers' => [ .... Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class ],
変更後
'providers' => [ Tymon\JWTAuth\Providers\LaravelServiceProvider::class ],
最後に、認証用の秘密鍵も更新する。
php artisan jwt:secret
これで後はLaravel 5.4 と Vue.js 2.2 と JWTAuth で、ログインできる SPA アプリケーションのチュートリアル その4 – Qiitaの通りに実装を進めることができた。
備考
ライブラリの安定版でなく開発版を使うのはいささか気が引ける。安定版のままでも動かせる解決策があったら乗り換えたい。
安定板のまま、エラー解消したい場合は、以下ファイルにhandle()を加えてやるといいみたいです。
/vendor/tymon/jwt-auth/src/Commands/JWTGenerateCommand.php
public function handle()
{
$this->fire();
}