Rails/RSPEC: Reset_Session ändert sich während der Integrationstests nicht an den HTTP-Header-Wert von Set-Cookie-Header

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

Frage

Ich schreibe einen Integrationstest, um sicherzustellen, dass mein WebApp nicht anfällig für Sitzungsfixierung ist.

Ich habe das manuell überprüft reset_session feuert tatsächlich in die Authentifizierungslogik und fördert weiter, dass sich der Cookie tatsächlich ändert, wenn ich mich mit meinem Webbrowser anmelde Überprüfen Sie dies.

Hier ist mein RSPEC -Integrationstest.

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

funktioniert alles außer für die allerletzte Behauptung. Der Keks ändert sich nicht.

Gibt es bekannte Probleme mit RSPEC/Rails -Integrationstests, bei denen reset_session Funktioniert nicht wie erwartet? Was kann ich tun, um einen Test zu schreiben, bei dem die Fixierung der Sitzung überprüft wird, ist kein Problem?

War es hilfreich?

Lösung

Also habe ich das schließlich herausgefunden.

Ich habe versucht, den Antwortheader direkt zu bearbeiten, um Cookies zu testen, aber ich denke, das ist nicht der gesegnete Weg.

In Integrationstests mit Rails 2.x sowieso gibt es einen Cookies -Hash, den Sie verwenden können. So sah der Test aus:

  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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top