Q&A

1度の LINE ログインで、コールバック URL に 2 回リクエストが来ることがある

前提・実現したいこと

  • LINE アカウントを使った認証機能を Web アプリに導入したいです
    • これ自体はすでに実現できています

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

  • OpenID Connect 連携後に、コールバック URL にリクエストが 2 回飛んでくることがあります
    • 後続のリクエストのほうが 1 秒程度遅れて飛んできます
    • 厳密には下記の 2 パターンがあります
      • 同じ認可コードで 2 回来るパターン
      • 違う認可コードで 2 回来るパターン
    • 使用済みの認可コードを再度使おうとしてエラーになったり、認可コードと引き換えに手に入れた認証情報を DB に保存する際にユニーク制約違反になったりするので困っています

該当のソースコード

  • ソースコードは貼りづらいので、実際に発生したログを添付します

同じ認可コードで 2 回来るパターン

Nov 24 15:35:55 heroku/router at=info method=GET path="/line/callback?allow=true&code=xckGO6qRnsp0HIS6Zoxy&state=a9a57d1d-****-****&friendship_status_changed=true&liffRedirectUri=https%3A%2F%2Fexample.com%2Fline%2Fcallback&liffClientId=16******" host=example.com request_id=07def68a-7954-4640-a20b-eb8dbd1fd011 fwd="126.152.9.227" dyno=web.2 connect=1ms service=471ms status=302 bytes=1135 protocol=https

Nov 24 15:35:56 heroku/router at=info method=GET path="/line/callback?allow=true&code=xckGO6qRnsp0HIS6Zoxy&state=a9a57d1d-****-****&friendship_status_changed=true&liffRedirectUri=https%3A%2F%2Fexample.com%2Fline%2Fcallback&liffClientId=16******" host=example.com request_id=cf85590a-ed30-4fef-912c-6cb7be680cfd fwd="126.152.9.227" dyno=web.1 connect=3ms service=419ms status=500 bytes=1343 protocol=https

違う認可コードで 2 回来るパターン

Nov 22 23:49:17 heroku/router sock=client at=warning code=H27 desc="Client Request Interrupted" method=GET path="/line/callback?friendship_status_changed=true&code=zCFrt0fA8tdDbnwzMypN&state=33f7fe09-****-****" host=example.com request_id=6a1016a4-9529-4e55-8833-a1506123aa9f fwd="106.129.21.236" dyno=web.1 connect=0ms service=1813ms status=499 bytes= protocol=https

Nov 22 23:49:17 heroku/router at=info method=GET path="/line/callback?friendship_status_changed=false&code=WYrKfYod0rXZEHY6BuAI&state=33f7fe09-****-****" host=example.com request_id=d68015da-ec5d-4797-9ee4-5283f89be49d fwd="106.129.21.236" dyno=web.1 connect=1ms service=1058ms status=500 bytes=1343 protocol=https

試したこと

  • ログの調査

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

  • Rails 6.0.3.2
  • Ruby 2.7.0
  • Heroku
  • 0
  • 0
  • 211
  • twitter facebook
本当によろしいですか? question.vm