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

i hope i'm not too late ;)

here is how it works (just paste it in your routes.rb and you good to go):

  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 'logout' => 'devise/sessions#destroy', :as => :destroy_user_session
    get 'register' => 'devise/registrations#new', :as => :new_user_registration
  end

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.


I was able to fix my issue by using the following code in my routes

  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 in my views if I use

  link_to "Register", new_user_registration_path

In my browser its showing as

  /user/sign_up   and not as /signup

But if I directly type /signup I will get the registraion page. Is there any mapping I need to do here.