[解決済み]Laravel+tymon/jwt-authのrefreshが期待通りに動かなくて爆ハマり

Laravelでjwtを使ったトークン認証をやってみようと思ってtymon/jwt-authを使っています。

色んな記事を参考に処理を作ってトークンの動作を確認していますが、refreshが思った通りに動かない現象に遭遇して、Googleで検索しまくって解決しました。

現象

JWT_TTLの期限が切れてもJWT_REFRESH_TTLの期限内であれば、再度トークンを取得できると色んな記事で書いてあるのにどうしても動かない。

具体的にはJWT_TTLが切れた後で、refreshを実行してもUnauthenticated.になるというものでした。

解決方法

refreshを実装しているコントローラーのmiddlewareでrefreshを実行するメソッドをexceptする必要があるようです。

■修正前

$this->middleware('auth:api', ['except' => ['login']]);

■修正後

$this->middleware('auth:api', ['except' => ['login', 'refresh']]);

refreshは有効期限切れでアクセスを通さないといけないからexceptにrefreshを入れないといけないということですかね。

Laravelの経験がそれなりにある人は気づくのかもしれないけど、僕みたいにあまり経験がない状態だと公式に書いてないからハマる人絶対いると思う。

■参考

https://github.com/tymondesigns/jwt-auth/issues/1442
https://github.com/tymondesigns/jwt-auth/issues/1863

これからはGoogle検索も英語で検索してみる必要がありそうですね。

コメント

タイトルとURLをコピーしました