9

プロダクションサーバーは、数か月間無効な認証トークンエラーを生成しています。エラーは、ほとんどすべてのフォーム送信(PUT | POST | DELETE)要求で生成されます。場合によってはエラーが発生することもありますが、時々エラーが発生することもあります。彼らがなぜ起こるかに関しては、韻や理由がないようです。エラー自体は頻繁には発生しませんが、それは私たちの心配です。以下に、このエラーの原因となる典型的なフォームの例を示します。ランダムな無効な本物のトークンエラーのデバッグ

<form class="button_to" method="post" action="/lesson_progress_trackers/333"> 
    <input type="hidden" name="_method" value="patch"> 
    <input class="finish-lesson-button" type="submit" value="Done!"> 
    <input type="hidden" name="authenticity_token" value="Qd3FsJZY2UXR9vahuFmaY5rrqA+J5xzGpl4cGI2Vwerx8PZPQtDMugz6oqoe3iviC+/U5zTYPdeX3apwbap09E=="> 
    <input type="hidden" name="completed" value="true"> 
</form> 

これまでに私が発見したことがあります。

  1. Turbolinks 2.5.3を使用しています(これは1年以上経っていません)。
  2. 無効なトークンエラーのすべてのケースで、ユーザーは真正性トークンをサーバーに渡しましたが、無効になったばかりです。
  3. 現在、当社のアプリケーションコントローラではprotect_from_forgery with: :exceptionを使用しています。
  4. 数か月前に多数の新しいコードを生産に投入したときにエラーが発生し始めました。この新しいコードは何百ものファイルに及んでいますが、これまでのところ、この問題に関連するコードでは何も見つかりませんでした。
  5. このエラーは、どのブラウザやデバイスで発生する可能性があります。
  6. トラフィックの増加と無効な認証トークンの間に相関はありません。
  7. ユーザーはどの国からでも参加できます。
  8. これらは、これらの問題が発生しているボットではありません。私たちは、同僚がこのエラーを経験することさえできましたが、彼らはそれを作り出すために何をしたのか思い出すことはできません。
  9. 期待されていない動作の場合、ユーザーは通常の動作を行います。彼らは意図したようにアプリを使用しています。私は彼らのクリックを見て、行動履歴を記録してこれを結論づけました。

最終的に私はこれを解決する方法を理解したいと思います。私の最初のステップは、エラーを正常に再現することですが、私はそれを行うことすらできません。私の質問はこれです:私は何が原因であるかを理解するために私を得るために私は何ができますか?私はオプションが不足しています。ありがとう!

+0

はい、私はそれをしました。これは実際のユーザーに発生しています。これらはボットではありません。私が発見したパターンは、典型的なユーザーの行動です。彼らがしていることに何も異常はない。私はこれが期待される行動だと言っても構わない。これがとても恐ろしい理由です。 – jason328

+0

何かが期限切れになるのを排除できますか?クッキーはちょうど1つのことです、それは時間に関連した比較、サーバーでの間違った時間、特定の時間などを期待するデータベースフィールドかもしれません。 – Smar

+0

私はそうは思わない?あなたの質問を少しはっきりさせることができますか? – jason328

答えて

1

これはあまりにも時間がかかりすぎても役に立ちませんが、私は同じ問題がありました。

  • が(それは/ CSRFトークンのセッションを期限切れにするほど長く座ってみましょうあなたは
  • は、ページ内の看板にブラウザのタブを開く
  • アプリからログアウトしていることを確認します

    1. :私はで再現することができました数時間になる可能性があります)
    2. ログインページに別のタブを開き、ログインしてください
    3. もう一度古いタブに戻り、もう一度ログインしてください - InvalidAuthenticityToken例外が発生します。

    2つのタブが1つのセッション(新しいタブが開いたときに作成されたセッション)を共有していたため、これが起こったと思います。ただし、古いタブにはログイン・フォームの古いセッションのcsrfトークンが残っていました。新しいセッションcookieと古いcsrfトークンが一緒に送信されると、一致しなかったため、エラーがスローされます。

    私は実際にこの問題を解決する方法がわかりません。エラーをより適切に処理して、ユーザーに混乱しているエラーページが表示されないようにしてください。

    ところで、私はdeviseを使用していますが、私はdeviseに固有だとは思わない。

    関連する問題