Problems w/ before_filter getting ignored


#1

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:

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
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

Any ideas how I can make this work?

Thanks,
Clem


#2

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.


#3

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.


#4

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 :slight_smile: 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