Forum: Ruby on Rails Problems w/ before_filter getting ignored

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Clem R. (Guest)
on 2008-11-05 06:41
Hello,
    I'm setting up an authentication module that will be called from
application.rb.      I want to save a rrequest.request_uri into a
session to be used as a place holder that
will take users back to the page they were on before they logged in.
I'm trying to call the store_location method for all methods EXCEPT
login by putting login in an except before filter.

For some reason, when I login the last request.request_uri address that
is stored in the session is /login.     For some reason, the
store_location method is still getting called when the login method is
called and then throws a "Redirect Loop" message in the brower

Here's the authentication module code:
[code]
module Authentication
  def store_location
    session['return-to'] = request.request_uri
  end

  def login
    user = User.find_authenticated_user(params[:username],
params[:password])
    unless user.blank? || user.nil?
      session[:user] = user
    end
    redirect_to store_location
  end
end

and here's the code I have so far in application.rb
[/code]

[code]
class ApplicationController < ActionController::Base

  before_filter :verify_user, :except => :login
  before_filter :store_location, :except => :login

  include Authentication

  helper :all # include all helpers, all the time
  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery #:secret => 'f2966dd9b280aee941288062544d2aa9'

  def index
  end
end
[/code]

Any ideas how I can make this work?

Thanks,
Clem
torm3nt (Guest)
on 2008-11-05 06:57
(Received via mailing list)
hmmm

I'm just guessing here, but have you tried creating a method in your
ApplicationController called store_location, which then makes the
appropriate module calls?

I'm guessing that ApplicationController can't see the store_location
method in your module.
Clem R. (Guest)
on 2008-11-05 16:28
torm3nt wrote:
> hmmm
>
> I'm just guessing here, but have you tried creating a method in your
> ApplicationController called store_location, which then makes the
> appropriate module calls?
>
> I'm guessing that ApplicationController can't see the store_location
> method in your module.


Thanks for getting back to me.    The store location method is clearly
getting called each time.    I can verify this by putting in
logger.debugs in that method and they are showing it's getting called
each time.
Frederick C. (Guest)
on 2008-11-05 16:34
(Received via mailing list)
On 5 Nov 2008, at 04:41, Clem R. wrote:
>  def store_location
>  end
> end
>
store_location is getting called because you're calling it from the
login method :-) You probably meant to do redirect_to session['return-
to'] (possibly checking whether session['return-to'] is nil and
redirecting the user to some where appropriate if that is the case
This topic is locked and can not be replied to.