我的印象是 Rails 会form_authenticity_token
在任何 POST、PUT 或 DELETE 操作之后重新生成。但由于某种原因,在成功 POST 到用户资源后form_authenticity_token
不会重新生成。我可以随意使用相同的 CSRF 令牌一遍又一遍地发布任意次数。
我有一个命名空间 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
视图......没有骰子。
我正在运行带有 Ruby 1.9.2p290 和 cookie 会话存储的 Rails 3.1.3。
真实性令牌正在通过请求标头(X-CSRF-Token)发送