Rails form_authenticity_token не восстанавливается после запроса POST - PullRequest
1 голос
/ 07 февраля 2012

У меня сложилось впечатление, что Rails будет восстанавливать form_authenticity_token после любого действия POST, PUT или DELETE. Но по какой-то причине после успешного POST для ресурса пользователя form_authenticity_token не восстанавливается. Я могу бесплатно размещать POST столько раз, сколько хотел бы, используя один и тот же токен CSRF снова и снова.

У меня есть API пространства имен, и я использую гем RABL для построения своих ответов. Вот так у меня все настроено ...

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 ... без кубиков.

Я использую Rails 3.1.3 с Ruby 1.9.2p290 с хранилищем файлов cookie.

Токен подлинности отправляется через заголовок запроса (X-CSRF-Token)

1 Ответ

4 голосов
/ 07 февраля 2012

У вас были неправильные впечатления.Как видно из соответствующего бита источника rails , маркер подлинности формы остается неизменным на протяжении всего времени сеанса.

...