Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Do not include the authenticity token in forms where remote: true as …

…ajax forms use the meta-tag value
  • Loading branch information...
commit 16ee611fad37b6b271088eda4cdbe3d6be088af1 1 parent f2aea24
David Heinemeier Hansson dhh authored
2  actionpack/CHANGELOG.md
View
@@ -1,5 +1,7 @@
## Rails 3.2.3 (unreleased) ##
+* Do not include the authenticity token in forms where remote: true as ajax forms use the meta-tag value *DHH*
+
* Turn off verbose mode of rack-cache, we still have X-Rack-Cache to
check that info. Closes #5245. *Santiago Pastorino*
11 actionpack/lib/action_view/helpers/form_tag_helper.rb
View
@@ -609,8 +609,15 @@ def html_options_for_form(url_for_options, options)
# responsibility of the caller to escape all the values.
html_options["action"] = url_for(url_for_options)
html_options["accept-charset"] = "UTF-8"
- html_options["data-remote"] = true if html_options.delete("remote")
- html_options["authenticity_token"] = html_options.delete("authenticity_token") if html_options.has_key?("authenticity_token")
+
+ if html_options.delete("remote")
+ html_options["data-remote"] = true
+
+ # The authenticity token is taken from the meta tag in this case
+ html_options["authenticity_token"] = false
+ else
+ html_options["authenticity_token"] = html_options.delete("authenticity_token") if html_options.has_key?("authenticity_token")
+ end
end
end
11 actionpack/test/controller/request_forgery_protection_test.rb
View
@@ -37,6 +37,10 @@ def form_for_without_protection
render :inline => "<%= form_for(:some_resource, :authenticity_token => false ) {} %>"
end
+ def form_for_remote
+ render :inline => "<%= form_for(:some_resource, :remote => true ) {} %>"
+ end
+
def rescue_action(e) raise e end
end
@@ -103,6 +107,13 @@ def test_should_render_button_to_with_token_tag
assert_select 'form>div>input[name=?][value=?]', 'custom_authenticity_token', @token
end
+ def test_should_render_form_without_token_tag_if_remote
+ assert_not_blocked do
+ get :form_for_remote
+ end
+ assert_no_match /authenticity_token/, response.body
+ end
+
def test_should_allow_get
assert_not_blocked { get :index }
end
Please sign in to comment.
Something went wrong with that request. Please try again.