Problems w/ before_filter getting ignored

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

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.

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.

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs