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

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.

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