2014-04-29 17 views
10

Tôi có một bộ điều khiển tên là ProductsController và tôi đã tạo một hành động có tên set_status cho mục đích gọi API PUT từ ứng dụng khách .NET. Tôi đã thiết lập mọi thứ chính xác nhưng sau khi gửi yêu cầu, tôi nhận được lỗi "Không thể xác minh mã thông báo CSRF". Tôi đã điều sau đây trong điều khiển ứng dụng của tôi để bảo vệ CSRF:Rails 3.2 - Vô hiệu hóa bảo vệ CSRF cho hành động điều khiển

protect_from_forgery 

Để bỏ qua bảo vệ CSRF, tôi đã thêm phần sau đây để điều khiển Sản phẩm của tôi:

skip_before_filter :set_status 

Sau khi thử nghiệm với sự thay đổi này , Tôi vẫn nhận được thông báo lỗi tương tự. Dựa trên sự hiểu biết của tôi, dòng mã trên nên vô hiệu hóa bảo vệ CSRF cho hành động set_status trong bộ điều khiển Sản phẩm, nhưng nó dường như không hoạt động.

Có ai có bất kỳ thông tin chi tiết nào về lý do điều này có thể không hoạt động không? Cảm ơn bạn rất nhiều trước!

Trả lời

18

Tôi đã tìm ra! Dưới đây là mã của tôi:

skip_before_filter :verify_authenticity_token, :only => [:set_status] 

Tôi quên rằng protect_from_forgery tuyên bố tạo ra phương pháp riêng của mình. Một trong những phương pháp đó là verify_authenticity_token, và vì vậy nó đơn giản hơn nhiều so với tôi nghĩ. Tôi đã bị mắc kẹt trước bởi vì tôi không có phương thức verify_authenticity_token, nhưng tôi thực sự đã làm vì nó được tạo tự động.

+1

Trong các phiên bản mới hơn của đường ray, hãy sử dụng 'skip_before_action' thay vì' skip_before_filter'. (skip_before_filter đã không còn được dùng nữa) –

Các vấn đề liên quan