【问题标题】:Rails form_authenticity_token not regenerating after POST requestRails form_authenticity_token 在 POST 请求后没有重新生成
【发布时间】:2012-02-29 00:12:20
【问题描述】:

我的印象是 Rails 会在任何 POST、PUT 或 DELETE 操作之后重新生成 form_authenticity_token。但由于某种原因,在成功 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 日志中没有错误或警告。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你有错误的印象。从rails source 的相关位可以看出,表单真实性令牌在会话的整个生命周期内保持不变。

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2018-07-29
      • 2021-09-13
      • 1970-01-01
      • 2021-11-28
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多