У меня сложилось впечатление, что 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)