ฉันมีปัญหาเดียวกัน แต่มีหน้าซึ่งถูกแคชหน้า หน้าถูกบัฟเฟอร์ด้วยโทเค็นของแท้ที่เก่าแล้วและการดำเนินการทั้งหมดโดยใช้วิธีการโพสต์ / วาง / ลบที่ได้รับการยอมรับว่าเป็นความพยายามปลอมแปลง ข้อผิดพลาด (422 ไม่สามารถประมวลผลได้) ถูกส่งคืนไปยังผู้ใช้
ทางออกสำหรับ Rails 3:
เพิ่ม:
skip_before_filter :verify_authenticity_token
หรือตามที่ "sagivo" ชี้ให้เห็นใน Rails 4 เพิ่ม:
skip_before_action :verify_authenticity_token
บนหน้าเว็บที่ทำการแคช
ตามที่ @toobulkeh แสดงความคิดเห็นว่านี่ไม่ใช่ช่องโหว่ใน:index
, :show
การกระทำ, แต่ระวังการใช้สิ่งนี้กับ:put
, :post
การกระทำ
ตัวอย่างเช่น:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]
การอ้างอิง: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
หมายเหตุเพิ่มโดย barlop- Rails 4.2 คัดค้าน skip_before_filter เพื่อสนับสนุน skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html "การใช้งานตระกูล * _filter ได้ถูกลบออกจากเอกสารประกอบ ตระกูลของวิธีการ "
สำหรับRails 6 (ตามที่ "collimarco" ชี้ให้เห็น) คุณสามารถใช้skip_forgery_protection
และมันปลอดภัยที่จะใช้สำหรับ REST API ที่ไม่ได้ใช้ข้อมูลเซสชัน