Use the referer of the last request when redirecting

This commit is contained in:
Rob van Dijk 2012-01-08 22:45:47 +01:00
parent 21977817bf
commit bf1637eb6d
3 changed files with 28 additions and 1 deletions

View File

@ -114,7 +114,11 @@ protected
def env
env = {}
begin
env["HTTP_REFERER"] = last_request.url
if last_response.redirect?
env["HTTP_REFERER"] = last_request.env["HTTP_REFERER"]
else
env["HTTP_REFERER"] = last_request.url
end
rescue Rack::Test::Error
# no request yet
end
@ -122,4 +126,5 @@ protected
env
end
end

View File

@ -22,6 +22,18 @@ class TestApp < Sinatra::Base
redirect '/landed'
end
get '/referer_base' do
'Referer base <a href="redirect_and_keep_referer">Link that will redirect</a>'
end
get '/redirect_and_keep_referer' do
redirect '/check_referer'
end
get '/check_referer' do
'Check referer'
end
get '/host' do
"Current host is #{request.scheme}://#{request.host}:#{request.port}"
end

View File

@ -86,4 +86,14 @@ describe Capybara::RackTest::Driver do
@driver.body.should include('foobar')
end
end
describe "keeping referer on redirect" do
it "should not update HTTP_REFERER on redirects" do
@driver.visit('/referer_base')
@driver.visit('/redirect_and_keep_referer')
@driver.body.should include('Check referer')
@driver.request.referer.should =~ /referer_base/
end
end
end