Wes Gamble
2007-Feb-21 20:07 UTC
SessionTimeout plugin doesn''t work w/other before_filters?
All,
I''ve installed Luke Redpath''s SessionTimeout plugin and am
trying to
make it work.
This is what I''ve put into my application.rb file:
session_times_out_in 30.seconds, :after_timeout =>
:handle_session_timeout, :except => :handle_session_timeout
But I also have a before_filter named :check_authentication. Even
though I do a "return false" from the handle_session_timeout method,
it
still keeps trying to call check_authentication.
I looked at the SessionTimeout code and I was under the impression that
it prepended itself to the before_filter chain. So returning false from
the session timeout handler should cause the filter chain to stop
executing, correct?
Anyone know what''s going on here?
Here''s my handle_session_timeout method:
def handle_session_timeout
puts "Running handle_session_timeout"
return false
end
and what I believe to be the relevant code from SessionTimeout:
module ClassMethods
def session_times_out_in(time, opts={})
opts[:after_timeout] = opts[:after_timeout] || nil
class_eval { prepend_before_filter Proc.new { |c|
c.check_session_expiry(time, opts)}, :except => opts[:except] }
end
end
Am I misunderstanding what prepend_before_filter does?
Thanks,
Wes
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Wes Gamble
2007-Feb-21 20:25 UTC
Re: SessionTimeout plugin doesn''t work w/other before_filter
I think I see what''s going on here.
My :after_timeout callback is not a before_filter. The before_filter
that SessionTimeout sets up is a Proc that in turn calls my method.
This is in the body of the method that gets called as a before_filter...
if session_has_timed_out?
logger.info "::: Session has expired, resetting session."
reset_session
unless opts[:after_timeout].nil?
logger.info "::: Calling after timeout callback"
opts[:after_timeout].call(self) if
opts[:after_timeout].instance_of?(Proc)
self.send(opts[:after_timeout]) if
opts[:after_timeout].instance_of?(Symbol)
return
end
else
logger.info "::: Session has not expired. Reinitialising."
initialize_session_expiry(time)
end
I think if I just change this code so that it returns the value of
opts[:after_timeout], then it should work.
WG
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Wes Gamble
2007-Feb-21 20:32 UTC
Re: SessionTimeout plugin doesn''t work w/other before_filter
Yup, that was it. By making the method that the Proc calls
(check_session_expiry) return the value of the callback, the callback
can then halt the filter processing if that is appropriate.
See updated code below:
module ClassMethods
def session_times_out_in(time, opts={})
opts[:after_timeout] = opts[:after_timeout] || nil
class_eval { prepend_before_filter Proc.new { |c|
c.check_session_expiry(time, opts)}, :except => opts[:except] }
end
end
def check_session_expiry(time, opts)
logger.info "::: Checking session expiry"
if session[:expires_at]
if session_has_timed_out?
logger.info "::: Session has expired, resetting session."
reset_session
unless opts[:after_timeout].nil?
logger.info "::: Calling after timeout callback"
#WG - bug fix so that callback method can halt filter processing.
# opts[:after_timeout].call(self) if
opts[:after_timeout].instance_of?(Proc)
# self.send(opts[:after_timeout]) if
opts[:after_timeout].instance_of?(Symbol)
# return
return opts[:after_timeout].call(self) if
opts[:after_timeout].instance_of?(Proc)
return self.send(opts[:after_timeout]) if
opts[:after_timeout].instance_of?(Symbol)
end
else
logger.info "::: Session has not expired. Reinitialising."
initialize_session_expiry(time)
end
else
"::: Session expiry not initialized"
initialize_session_expiry(time)
end
end
WG
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---