mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Just reading flash messages should not create a session if one does not exist yet.
This commit is contained in:
parent
6682cce038
commit
a12b76b09e
3 changed files with 29 additions and 5 deletions
|
@ -194,9 +194,12 @@ module ActionDispatch
|
||||||
@env['rack.input']
|
@env['rack.input']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO This should be broken apart into AD::Request::Session and probably
|
||||||
|
# be included by the session middleware.
|
||||||
def reset_session
|
def reset_session
|
||||||
session.destroy if session
|
session.destroy if session
|
||||||
self.session = {}
|
self.session = {}
|
||||||
|
@env['action_dispatch.request.flash_hash'] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def session=(session) #:nodoc:
|
def session=(session) #:nodoc:
|
||||||
|
|
|
@ -4,7 +4,7 @@ module ActionDispatch
|
||||||
# read a notice you put there or <tt>flash["notice"] = "hello"</tt>
|
# read a notice you put there or <tt>flash["notice"] = "hello"</tt>
|
||||||
# to put a new one.
|
# to put a new one.
|
||||||
def flash
|
def flash
|
||||||
session['flash'] ||= Flash::FlashHash.new
|
@env['action_dispatch.request.flash_hash'] ||= (session["flash"] || Flash::FlashHash.new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -176,7 +176,14 @@ module ActionDispatch
|
||||||
|
|
||||||
@app.call(env)
|
@app.call(env)
|
||||||
ensure
|
ensure
|
||||||
if (session = env['rack.session']) && session.key?('flash') && session['flash'].empty?
|
session = env['rack.session'] || {}
|
||||||
|
flash_hash = env['action_dispatch.request.flash_hash']
|
||||||
|
|
||||||
|
if flash_hash && (!flash_hash.empty? || session.key?('flash'))
|
||||||
|
session["flash"] = flash_hash
|
||||||
|
end
|
||||||
|
|
||||||
|
if session.key?('flash') && session['flash'].empty?
|
||||||
session.delete('flash')
|
session.delete('flash')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -236,6 +236,15 @@ class FlashIntegrationTest < ActionController::IntegrationTest
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_just_using_flash_does_not_stream_a_cookie_back
|
||||||
|
with_test_route_set do
|
||||||
|
get '/use_flash'
|
||||||
|
assert_response :success
|
||||||
|
assert_nil @response.headers["Set-Cookie"]
|
||||||
|
assert_equal "flash: ", @response.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Overwrite get to send SessionSecret in env hash
|
# Overwrite get to send SessionSecret in env hash
|
||||||
|
@ -247,10 +256,15 @@ class FlashIntegrationTest < ActionController::IntegrationTest
|
||||||
def with_test_route_set
|
def with_test_route_set
|
||||||
with_routing do |set|
|
with_routing do |set|
|
||||||
set.draw do |map|
|
set.draw do |map|
|
||||||
match ':action', :to => ActionDispatch::Session::CookieStore.new(
|
match ':action', :to => FlashIntegrationTest::TestController
|
||||||
FlashIntegrationTest::TestController, :key => FlashIntegrationTest::SessionKey, :secret => FlashIntegrationTest::SessionSecret
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@app = self.class.build_app(set) do |middleware|
|
||||||
|
middleware.use ActionDispatch::Session::CookieStore, :key => SessionKey
|
||||||
|
middleware.use ActionDispatch::Flash
|
||||||
|
middleware.delete "ActionDispatch::ShowExceptions"
|
||||||
|
end
|
||||||
|
|
||||||
yield
|
yield
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue