Search code examples
ruby-on-railsdevise

How to change the login and signup urls in devise plugin Rails


I am using devise plugin in my new Rails App. My issue is devise plugin has default roots for login and signup

/users/sign_in
/users/sign_up

I need to change this to

/login 
/signup

For this I used the following routing

 devise_for :users do
   get "login", :to => "devise/sessions#new"
   get "signup", :to => "devise/registrations#new"
 end

With this I need to specify 'login_path' and 'signup_path' everywhere in my views where new_user_session_path and new_user_registration_path comes

What I want is a configuration in routes which maps '/login' and '/signup' to new_user_session_path and new_user_registration_path.

I have seen a post which route /users/sign_in and /users/sign_up to /sign_in and /sign_up using the below shown routing.

  devise_for :user, :as => ''

I need some routing technique like this which routes /users/sign_in and /users/sign_up to /login and /signup.

Could anyone please help me with this.

UPDATE: I have changed my routes.rb file to

  devise_for :users,
         :controllers => { :sessions => 'devise/sessions'},
         :skip => [:sessions] do
       get '/login' => "devise/sessions#new", :as => :new_user_session
       post '/login' => 'devise/sessions#create', :as => :user_session
       get '/signout' => 'devise/sessions#destroy', :as => :destroy_user_session
       get '/signup' => 'devise/registrations#new', :as => :new_user_registration
  end

But still when I use link_to 'new_user_registration' in my views its not showing as '/signup' in the browser


Solution

  • Here are a little bit more options than you asked but it's clear:

      devise_for :users,
                 :controllers => { :registrations => "users/registrations",
                                   :confirmations => "users/confirmations",
                                   :sessions => 'devise/sessions'},
                 :skip => [:sessions] do
        get '/signin'   => "devise/sessions#new",       :as => :new_user_session
        post '/signin'  => 'devise/sessions#create',    :as => :user_session
        get '/signout'  => 'devise/sessions#destroy',   :as => :destroy_user_session
        get "/signup"   => "users/registrations#new",   :as => :new_user_registration
      end
    

    Even more, with :registrations => "users/registrations" we can additionally customize redirects:

    class Users::RegistrationsController < Devise::RegistrationsController
      protected
    
      def after_sign_up_path_for(resource)
        welcome_path # it's not a home path
      end
    
      def after_update_path_for(resource)
        edit_user_registration_path
      end
    end
    

    Devise has a good wiki.