When I have a specific action that I don't want to check the authenticity token on, how do I tell Rails to skip checking it?
Asked
Active
Viewed 9.4k times
2 Answers
256
Rails 5.2+
You can use the same skip_before_action
method listed below or a new method skip_forgery_protection
which is a thin wrapper for skip_before_action :verify_authenticity_token
skip_forgery_protection
Rails 4+:
# entire controller
skip_before_action :verify_authenticity_token
# all actions except for :create, :update, :destroy
skip_before_action :verify_authenticity_token, except: [:create, :destroy]
# only specified actions - :create, :update, :destroy
skip_before_action :verify_authenticity_token, only: [:create, :destroy]
See all options @ api.rubyonrails.org
Rails 3 and below:
skip_before_filter :verify_authenticity_token

BinaryButterfly
- 18,137
- 13
- 50
- 91

edebill
- 7,655
- 5
- 32
- 31
-
for specific controller and specific action, use: skip_before_filter :verify_authenticity_token, :only=> :my_unprotected_action. I came here to find the answer to: is this a terrible idea? I'm looking to do this because an ajax response eats my session. – Danny Jun 10 '13 at 22:03
-
9For rails 5.2, use `skip_forgery_protection`. See [API docs](http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html#method-i-skip_forgery_protection). – Aaron Breckenridge Jun 13 '18 at 17:56
32
In Rails4 you use skip_before_action
with except
or 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

Epigene
- 3,634
- 1
- 26
- 31
-
Thanks for this. It helped me create [this answer](https://stackoverflow.com/a/66669446/313756) to a similar question. :) – lindes Mar 17 '21 at 08:33