2009-07-24 24 views
150

Khi tôi có một hành động cụ thể mà tôi không muốn kiểm tra mã thông báo xác thực, tôi làm cách nào để yêu cầu Rails bỏ qua kiểm tra nó?Làm cách nào để bỏ qua mã thông báo xác thực cho các tác vụ cụ thể trong Rails?

+6

+1, thật đáng buồn vì bạn đã được bình chọn để trả lời câu hỏi của riêng bạn, điều này hoàn toàn hợp pháp. –

+15

eh. Tôi đặt nó ở đây bởi vì tôi đã tìm kiếm tất cả cho nó và đã có một thời gian khó tìm kiếm một câu trả lời - Tôi nghĩ rằng nó có thể giúp một số folks khác. Cảm ơn bạn đã bỏ phiếu cho tôi. – edebill

Trả lời

201

Đối với những hành động riêng lẻ, bạn có thể làm:

protect_from_forgery :only => [:update, :delete, :create] 
#or 
protect_from_forgery :except => [:update, :delete, :create] 

Đối với toàn bộ một bộ điều khiển, bạn có thể làm:

skip_before_action :verify_authenticity_token 

Và Rails 3.x yêu cầu:

skip_before_filter :verify_authenticity_token 
+0

thx cho tài liệu này – clyfe

+0

cho bộ điều khiển cụ thể và hành động cụ thể, sử dụng: skip_before_filter: verify_authenticity_token,: only =>: my_unprotected_action. Tôi đến đây để tìm câu trả lời cho: đây có phải là một ý tưởng khủng khiếp không? Tôi đang tìm cách để làm điều này bởi vì một phản ứng ajax ăn phiên của tôi. – Danny

+29

Đối với đường ray 4, hãy sử dụng 'skip_before_action: verify_authenticity_token', xem [Tài liệu API] (http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html) – amoebe

23

Trong Rails4 bạn sử dụng skip_before_action với except hoặc only.

class UsersController < ApplicationController 
    skip_before_action :verify_authenticity_token, only: [:create] 
    skip_before_action :some_custom_action, except: [:new] 

    def new 
    # code 
    end 

    def create 
    # code 
    end 

    protected 
    def some_custom_action 
    # code 
    end 
end 
Các vấn đề liên quan