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
on 2008-11-05 06:41
on 2008-11-05 06:57
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.
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.
on 2008-11-05 16:34
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