Q&A

getIDTokenで取得したidTokenが期限切れになっていて困っています

前提・実現したいこと

liff.getIDToken()で取得したidTokenを使って自前のサーバーとやり取りをしたい。 liff.getIDToken()の度にtokenをリフレッシュすることは可能でしょうか?

発生している問題・エラーメッセージ

一度getIDTokenを実行すると、localstorageにidTokenが保持され、次回以降のgetIDTokenではlocalstorageからidTokenを取得しているようです。 そのため、初回に実行した結果のidTokenの期限が切れてもそのidTokenを参照してしまうようです。

補足情報(FW/ツールのバージョンなど)

liff @line/liff 2.6.0

getIDTokenで検索したところどのQAにもヒットしなかったため、新しいQAとして作成します。

  • 1
  • 6
  • 4768
  • twitter facebook

手前味噌ですが、対策方法をzennの記事としてまとめさせていただきました。

https://zenn.dev/arahabica/articles/274bb147a91d8a

  • 0

手元で試しましたが、liff.init()後にliff.init()を再び呼び出してもidTokenは更新されませんでした。 liffアプリの使われ方として、画面を開いて1hを超えて操作されることが想定されていないのかなという見解です。

暫定の対応として、getIdTokenの前にトークンの有効期限の確認を行い、有効期限が切れていればlocation.reload()で画面を更新して再度liff.init()でidTokenを更新しようと思います。

Kokiさんご回答ありがとうございました。

  • 1

一度getIDTokenを実行すると、localstorageにidTokenが保持され、次回以降のgetIDTokenではlocalstorageからidTokenを取得しているようです。

これは実際に動かして確認しています。ただ、今回のケースとして、 liff.init() -> liff.getIDToken() -> トークンの有効期限が切れるまで待機 -> liff.getIDToken() という流れで操作を行いました。

ですので、liff.getIDToken()の前にフロント側でトークンの有効期限を確認し、切れている場合は再度liff.init()を実行することを試してみようと思います。

  • 0

ありがとうございます。

一度getIDTokenを実行すると、localstorageにidTokenが保持され、次回以降のgetIDTokenではlocalstorageからidTokenを取得しているようです。

これはドキュメントのどこを参考にしたのでしょうか?もしこれが常に行われる仕様であれば、SDKのバグになってしまいます。

IDトークンを習得するタイミングは以下のドキュメントで解説されているので、今一度ご自分の実装を確認してみてはいかがでしょうか? 基本的には liff.init()を呼び出したタイミングで新しいIDトークンが発行されるという仕組みになっているようですのでliff.init()を実行(ブラウザであればliff.login()後にもう一回liff.init()を実行)したあとにliff.getIDToken()でIDトークンを取得するように実装すればIDトークンが期限切れになるということがないと思います。

https://developers.line.biz/ja/reference/liff/#get-id-token

  • 1

期限切れになって困っています。 タイトル変更しました。

  • 0

ちょっとQAのタイトルと本文が矛盾していますが、IDTokenが期限切れになって困っているんですか? それとも期限切れにさせたいのにできないから困っているんですか?

  • 0
Are you sure? question.vm