Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Redirecting after sign in with Devise

I know this question has been asked quite a few times, but somehow it's not working for me. I would like the user to be redirected to a specific page after log in (using Devise). I'm using Rails 3.2 and Ruby 4.

As it is the user get redirected to: - After login they get redirected to the root, if the user got to the login page from one of the pages controlled by the controller of which the root path is part of. These pages do not require authorization. - After login they get redirected to the requested page, if the user automatically got to the login page by clicking on a page that requires authorization.

To redirect the user after login to a specific page, I understand that you need to add to the controller some lines. To the controller that is controlling the pages that required authorization I added:

class AccountsController < ApplicationController
    before_filter :authenticate_user!

    def user1_home
    end
    def user2_home
    end
    def user3_home
    end

    protected
    def after_sign_in_path_for(resource)
        'accounts/user1_home'
    end
end

However, this didn't change anything. I also tried it with def after_sign_in_path_for(resource) 'accounts#user1_home_path' end

Should I perhaps also change something in routes.rb? My routes are:

        new_user_session GET    /users/sign_in(.:format)          devise/sessions#new
            user_session POST   /users/sign_in(.:format)          devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)         devise/sessions#destroy
           user_password POST   /users/password(.:format)         devise/passwords#create
       new_user_password GET    /users/password/new(.:format)     devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)    devise/passwords#edit
                         PUT    /users/password(.:format)         devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)           devise/registrations#cancel
       user_registration POST   /users(.:format)                  devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)          devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)             devise/registrations#edit
                         PUT    /users(.:format)                  devise/registrations#update
                         DELETE /users(.:format)                  devise/registrations#destroy
       user_confirmation POST   /users/confirmation(.:format)     devise/confirmations#create
   new_user_confirmation GET    /users/confirmation/new(.:format) devise/confirmations#new
                         GET    /users/confirmation(.:format)     devise/confirmations#show
                     toc GET    /toc(.:format)                    pages#toc
             stakeholder GET    /stakeholder(.:format)            pages#stakeholder
                   about GET    /about(.:format)                  pages#about
   doelgroep_onderneming GET    /doelgroep_onderneming(.:format)  pages#doelgroep_onderneming
           doelgroep_ngo GET    /doelgroep_ngo(.:format)          pages#doelgroep_ngo
            doelgroep_se GET    /doelgroep_se(.:format)           pages#doelgroep_se
             partnership GET    /partnership(.:format)            pages#partnership
                 contact GET    /contact(.:format)                pages#contact
     account_stakeholder GET    /account/stakeholder(.:format)    accounts#stakeholder_home
        account_business GET    /account/business(.:format)       accounts#business_home
           account_admin GET    /account/admin(.:format)          accounts#admin_home
                    root        /                                 pages#index
like image 695
Nick Avatar asked Oct 20 '25 04:10

Nick


2 Answers

You definitely shouldn't be defining methods per user in the Accounts controller.

Devise has instructions on github for accomplishing this: https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

You need to move after_sign_in_path_for to the ApplicationController class and you shouldn't have 'accounts/user1_home'. To go to the right url for each use you should have something along the lines of user_path(@user) but I don't have enough of your code to know exactly what to use. You should run in a console window the rake routes command to see what you routes you have made available. Read more about routing at: http://guides.rubyonrails.org/routing.html

like image 154
Justin D. Avatar answered Oct 21 '25 19:10

Justin D.


Yes. Set the following at any point (before or after login):

session["user_return_to"] = request.original_url # Will redirect the user to where they came from
like image 34
dipole_moment Avatar answered Oct 21 '25 19:10

dipole_moment



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!