私はrails authenticity tokenとDeviseログイン/ログアウトに問題があります。Rails CSRFトークンの信頼性と脆弱性
バックボーンjsを使用して1ページのアプリケーションを構築していますので、私はajaxを使ってログイン/ログアウトしています。ここに私が守っていることがあり、なぜこれが起こっているのか正確には分かりません。
私のレイアウトにはcsrf_meta_tagsがあります。ページが読み込まれ、ログインボタンをクリックしてフォームに記入して送信すると、正常にログインしています。私はログインできるユーザーができるはずのことをすることができます。
ここで私はajax経由でDELETE要求を送信するログアウトボタンをクリックし、正常にログアウトしました。
上記のすべてのプロセスは単一のページにありますが、ページのリロードはすべてのajaxで行われません。
ログインをもう一度クリックしてフォームに記入すると、Ajaxリクエストが送信されますが、ログインしても、サーバーコンソールに警告メッセージが表示されます。
WARNING: Can't verify CSRF token authenticity
ここで、(レール)がCSRFトークンの信頼性を検証できなかった場合、私は最初になぜログインしたのですか?
と今私は、ログインしているユーザーフォームを投稿すると、エラー工夫
401 Unauthorized {"error":"You need to sign in or sign up before continuing."}
からのメッセージやサーバーコンソール上の警告で失敗し、それが失敗した行うことができるはずという事をしようとすると
WARNING: Can't verify CSRF token authenticity
と は、この時点で私は自分のページを更新した場合、私は私がこれ以上ログインしていますことを見ることができない、ログアウトしています。
が起こっていますか?
最初にログアウトした後、最初の信頼性トークンが期限切れになりますか?
私はあなたがすべてのあなたのAjaxリクエストにauthenticity_token
変数を送信する必要があり、事前に
rails (3.2.3)
devise (2.1.0)
感謝:)
私はまったく同じ問題を抱えています。解決策を見つけた場合はコメントしてください。 Thx – vrepsys
私はなぜ問題が発生しているのか分かります。その理由はcsrfトークンはサインアウト時に期限切れとなり、そのajaxベースのsign_out以来、ページはリロードされず、新しいトークンはページに乗っていないため、後続のリクエストに不一致が生じます。今は問題を回避するためにsign_outのページをリロードしています。誰か(あなたかもしれませんか?)は、deviseメーリングリストに同じことを投稿しました。 – Abid
@Abid、私の古いレールプロジェクトで同じエラーが出て、それが私を狂ったものにしてくれるのですが、解決策を見つけましたか?もしあなたがu havaなら、私たちに知らせてください。tkx – Neo