I use the squeeze-backport of redmine on Debian.
With the default setup, all the Ajax-Post-Requests cause the logout of the current user due to the missing X-CSRF-Token.
Because I could not find a complete solution, I backported the CSRF-Code from a newer relase.
Step 1: Replace public/javascripts/application.js
Replace the existing file with the one from: http://www.redmine.org/projects/redmine/repository/revisions/7926/entry/trunk/public/javascripts/application.js#L337
Step 2: Add CSRF-Token to in app/views/layouts/base.rhtml
<meta name="keywords" content="issue,bug,tracker" /> <%= csrf_meta_tag %> <%= favicon %>
Step 3: Create the csrf-Helper app/helpers/csrf_helper.rb
module ActionView
# = Action View CSRF Helper
module Helpers
module CsrfHelper
# Returns meta tags "csrf-param" and "csrf-token" with the name of the cross-site
# request forgery protection parameter and token, respectively.
#
# <head>
# <%= csrf_meta_tags %>
# </head>
#
# These are used to generate the dynamic forms that implement non-remote links with
# <tt>:method</tt>.
#
# Note that regular forms generate hidden fields, and that Ajax calls are whitelisted,
# so they do not use these tags.
def csrf_meta_tags
if protect_against_forgery?
[
tag('meta', :name => 'csrf-param', :content => html_escape(request_forgery_protection_token) ),
tag('meta', :name => 'csrf-token', :content => html_escape(form_authenticity_token) )
].join("\n")
end
end
def html_escape(s)
s.to_s.gsub(/[&"><]/) { |special| HTML_ESCAPE[special] }
end
# For backwards compatibility.
alias csrf_meta_tag csrf_meta_tags
end
end
end