2012-05-15 19 views
6

Tôi đang cố gắng xây dựng một api cho ứng dụng đường ray của tôi.skip_before_filter khi api_key hiện diện

Tôi muốn bỏ qua csrf trước khi lọc khi api_key hợp lệ có trong các yêu cầu không nhận được.

Tôi đã thử (tôi sẽ xác nhận các API_KEY một khi tôi có thể nhận được các bộ lọc có điều kiện làm việc)

(skip_before_filter :verify_authenticity_token) if params[:api_key].present? 

Nhưng điều đó không làm việc ...

Bất kỳ ý tưởng?

+0

Tại sao điều khiển API của bạn kế thừa từ ApplicationController? – apneadiving

+0

Tôi đã cố gắng để ngăn chặn bản thân mình từ việc phải tạo ra hai bộ điều khiển để làm một cách hiệu quả cùng một điều. – Cyrus

Trả lời

6

tôi không nghĩ rằng có thể làm việc, bởi vì nếu biểu hiện được đánh giá trong quá trình tạo của lớp điều khiển, vì vậy params[:api_key].present? là sai lúc đó ... u có thể thử

skip_before_filter :verify_authenticity_token, :if =>lambda{ params[:api_key].present?}

+0

Tôi sẽ thử. – Cyrus

+0

Điều này có vẻ thực sự hứa hẹn, nhưng nó không hoạt động. 'skip_before_filter: verify_authenticity_token' hoạt động mà không có điều kiện lạ. – Cyrus

+0

ihave đã kiểm tra skip_before_filter: verify_authenticity_token,: if => lambda {params [: api_key] .present?} Và nó có vẻ hoạt động nếu được chèn sau bảo vệ_from_forgery –

-2

thử này

skip_before_filter :verify_authenticity_token, :except => [], if params[:api_key].present? 
+0

Tôi đã thử cách này và nó không hoạt động :( – Cyrus

-1

Không có cách nào để thực hiện skip_before_filter có điều kiện. Bạn không thể sử dụng 'if' trên skip_before_filter.

0

Rails 3.2.13 -

Không ai trong số các giải pháp trên làm việc (có lẽ tôi đã làm sai điều gì?) Nhưng điều này đã làm:

skip_before_filter :verify_authenticity_token, :if => :check_auth 
def check_auth 
    request.headers["authentication_token"] == ENV['AUTH_KEY'] 
end 
Các vấn đề liên quan