Rails/rspec: reset_session не изменяет значение заголовка HTTP Set-Cookie во время интеграционных тестов

StackOverflow https://stackoverflow.com/questions/4764126

Вопрос

Я пишу интеграционный тест, чтобы убедиться, что мое веб -приложение не уязвимо для фиксации сеанса.

Я вручную проверил, что reset_session На самом деле стреляет в логику аутентификации, и, кроме того, что файл cookie действительно меняется, когда я вхожу в систему со своим веб -браузером (так что я больше не уязвим к фиксации сеанса), но я не могу получить свой тест на интеграцию RSPEC до успешного Проверьте это.

Вот мой тест интеграции RSPEC.

require 'spec_helper'

describe "security" do

  self.use_transactional_fixtures = false

  append_after(:each) do
    ALL_MODELS.each &:delete_all
  end

  describe "session fixation" do
    it "should change the cookie session id after logging in" do

      u = test_user :active_user => true,
                    :username => "nobody@example.com",
                    :password => "asdfasdf"
      u.save!

      https!

      get_via_redirect "/login"
      assert_response :success
      cookie = response.header["Set-Cookie"].split(";").select{|x| x.match(/_session/)}[0].split("=")[1].strip

      post_via_redirect "/login", "user[email]" => "nobody@example.com",
                                  "user[password]" => "asdfasdf",
                                  "user[remember_me]" => "1"
      assert_response :success
      path.should eql("/dashboard")
      cookie.should_not eql(response.header["Set-Cookie"].split(";").select{|x| x.match(/_session/)}[0].split("=")[1].strip)
    end
  end
end

Все работает кроме Для самого последнего утверждения. Cookie не меняется.

Есть ли известные проблемы с тестами интеграции RSPEC/Rails, где reset_session не работает, как ожидалось? Что я могу сделать, чтобы написать тест, который проверяет фиксацию сеанса, не является проблемой?

Это было полезно?

Решение

Так что в конце концов я в конечном итоге выяснил это.

Я пытался отредактировать заголовок ответа непосредственно для тестирования файлов cookie, но я думаю, что это не блаженный путь.

В любом случае, в интеграционных тестах с Rails 2.x есть хэш файлов cookie, который вы можете использовать. Вот как выглядел тест:

  u = test_user :active_user => true,
                :username => "nobody@example.com",
                :password => "asdfasdf"
  u.save!

  https!

  get_via_redirect "/login"
  assert_response :success
  cookie = cookies['_session']
  cookie.should be_present
  path.should == "/login"

  post_via_redirect "/login", "user[email]" => "nobody@example.com",
                              "user[password]" => "asdfasdf",
                              "user[remember_me]" => "1"
  assert_response :success
  path.should eql("/?login_success=1")
  new_cookie = cookies['_session']
  new_cookie.should be_present
  cookie.should_not eql(new_cookie)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top