Pablo Fernandez
Pablo Fernandez

Reputation: 287680

Redirect to specific URL after logging in

Is there a way in Devise 1.0, the library for Rails 2.3, to redirect to a specific URL and not root_url after logging in?

EDIT: forgot to mention it's Devise 1.0

Upvotes: 11

Views: 17242

Answers (3)

eagor
eagor

Reputation: 10045

Suppose you want to show user's dashboard after logging in.

class HomesController < ApplicationController    
    def index
       if current_user //returns nil if not logged in
          @users = User.all
          render :dashboard
       end
    end

    def dashboard
       @users = User.all
    end
end

in routes.rb:

root :to => 'homes#index'

If logged in, if-block is entered in index action and dashboard.erb is rendered. (make sure to initialize all variables, required by dashboard.erb, in your if-block) Otherwise rails renders index.erb

Upvotes: 0

bowsersenior
bowsersenior

Reputation: 12574

Chances are that your user is being redirected before after_sign_in_path is called. This happens if the user tries to go to a page that is protected by authentication directly. This will happen all the time if you have your root_path ('/') protected by authentication.

There's a discussion on google groups about this topic:

The quick and dirty solution is to overwrite stored_location_for to always return nil like so:

class ApplicationController < ActionController::Base  
...

  private 
  def stored_location_for(resource_or_scope)
    nil
  end

  def after_sign_in_path_for(resource_or_scope)
    my_favorite_path
  end
end

Upvotes: 21

Sidane
Sidane

Reputation: 2101

I think the after_sign_in_path_for method in Devise is what you're looking for.

Define that method in your ApplicationController and it will over-ride Devise's default implementation. This is what the documentation specifies to do.

Details here: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for

Upvotes: 4

Related Questions