FIELD NOTES
LINEログインで、注文が数分後に通らなくなった
お客さんがLINEでログインして注文するカフェ向けのアプリ(Breeze Coffee)を作っているとき、こんな不具合が起きました。メニューを眺めて、カートに入れて、注文ボタンを押す。ここまでに数分かけると、注文が失敗する。すぐに押せば、通る。
原因:期限のある「証明書」を使っていた
LINEログインでは、「いまログインしているのは誰か」をサーバーに伝えるために、次の2種類の情報を使えます。
- IDトークン:ログインしたときに発行される、期限つきの証明書。自動では更新されない
- アクセストークン:LINEのアプリ側(LIFF)が、裏で自動的に更新してくれる
最初は、IDトークンでお客さんを確認していました。ところが、IDトークンはログイン時に一度発行されるだけなので、時間がたつと期限が切れます。すると、サーバーは「この人は誰なのか」を確かめられず、注文が失敗する。数分かけてから注文したときだけ壊れていたのは、この期限切れのせいでした。
直し方
サーバーへ送るのを、アクセストークンに変えました。サーバーは、それをLINEのプロフィール取得のAPIに問い合わせて、「誰のものか」を確認します。更新はLIFFが裏で行ってくれるので、店内で迷いながらゆっくり注文しても、失敗しません。
「動く」ことと、「使われ方の通りに動く」ことは、別。
開発中には、見つかりにくい
作っている最中は、ログインしてすぐに操作するのが普通です。そのため、期限切れは、ほとんど再現しません。お客さんが実際にするような、「数分間迷ってから押す」という動きは、意図して試さないと出てこない不具合でした。
開発用のログインも、用意してある
LINEの設定が済んでいない段階でも動作を確かめられるよう、名前を入力するだけで使える、開発用のログインも用意しています。本番用のLIFFの設定が入った瞬間に、自動で無効になる作りです。
この件で、決めたこと
- 時間がかかる操作は、わざとゆっくり試す
- 期限のあるものを使うときは、期限が切れたときの動きを先に決める
- 認証まわりでは、「自動で更新されるか、されないか」の説明を、読み飛ばさない