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の経験がそれなりにある人は気づくのかもしれないけど、僕みたいにあまり経験がない状態だと公式に書いてないからハマる人絶対いると思う。
■参考
Refresh not working when token is expired but still within the refresh ttl · Issue #1442 · tymondesigns/jwt-auth
Hey 🙂 I have set up a installation of laravel 5.5 with tymon/jwt-auth:1.0.0-rc1 and everything works great, except for 1 thing it seems (or maybe I don't unders...
JWT_TTL vs JWT_REFRESH_TTL · Issue #1863 · tymondesigns/jwt-auth
Your environment Q A Bug? maybe New Feature? maybe Framework Laravel Framework version 5.8 Package version ^1.0.0-rc.3 PHP version 7.3 What is the difference be...
これからはGoogle検索も英語で検索してみる必要がありそうですね。
コメント