在POST请求后,raails form_authenticity_token不会重新生成

时间:2012-02-07 14:55:22

标签: ruby-on-rails ruby-on-rails-3.1 csrf authenticity-token

我的印象是Rails会在POST,PUT或DELETE操作后重新生成form_authenticity_token。但由于某些原因,在成功POST到用户资源后,form_authenticity_token不会重新生成。我可以一次又一次地使用相同的CSRF令牌自由发布POST。

我有一个命名空间API,我正在使用RABL gem来构建我的响应。这就是我所有设置的方式......

class Api::V1::UsersController < Api::V1::ApplicationController
  ...
  def create
    @user = User.new(params[:user])
    render "show", :status => (@user.save ? :ok : :unprocessable_entity)
  end
  ...
end

class Api::V1::ApplicationController < ApplicationController
  layout '/api/v1/layouts/application.json.erb'
  respond_to :json
  before_filter :authenticate_user!
  ...
end

class ApplicationController < ActionController::Base
  protect_from_forgery
end

帖子很好,在development.log或安慰的$ rails s日志中没有错误或警告。

我在verified_request?方法中检查了create,它返回true。我删除了渲染并使用与create.json.rabl视图相同的代码设置了show.json.rabl视图...没有骰子。

我正在使用带有cookie会话存储的Ruby 1.9.2p290运行Rails 3.1.3。

通过请求标头(X-CSRF-Token)发送真实性令牌

1 个答案:

答案 0 :(得分:4)

你的印象错误。正如您从rails source的相关位看到的那样,表单真实性令牌在会话的生命周期内保持不变。