[Laravel] JWTAuthの導入で詰まったポイント整理

概要

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の通りに実装を進めることができた。

備考

ライブラリの安定版でなく開発版を使うのはいささか気が引ける。安定版のままでも動かせる解決策があったら乗り換えたい。

参考

[Laravel] JWTAuthの導入で詰まったポイント整理」への1件のフィードバック

  1. lemonjp

    安定板のまま、エラー解消したい場合は、以下ファイルにhandle()を加えてやるといいみたいです。

    /vendor/tymon/jwt-auth/src/Commands/JWTGenerateCommand.php

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

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です