2

I am using devise and I want to customize its urls:

users/sign_in --> account/login
users/sign_up --> account/register
users/edit    --> account/profile
...

Now my routes.rb looks like this:

  devise_scope :user do
    get '/account/login' => 'devise/sessions#new'
    post 'account/login' => 'devise/sessions#create', as: :user_session
    delete 'account/logout' => 'devise/sessions#destroy', as: :destroy_user_session

    post 'account/password' => 'devise/passwords#update', as: :user_password
    get 'account/password/forgot' => 'devise/passwords#new', as: :new_user_password
    get 'account/password/edit' => 'devise/passwords#edit', as: :edit_user_password
    put 'account/password' => 'devise/passwords#update'

    get 'account/cancel' => 'devise/registrations#cancel', as: :cancel_user_registration
    post 'account' => 'devise/registrations#create', as: :user_registration
    get 'account/register' => 'devise/registrations#new', as: :new_user_registration
    get 'account' => 'devise/registrations#edit', as: :edit_user_registration
    put 'account' => 'devise/registrations#edit'
    delete 'account' => 'devise/registrations#destroy'
  end
  devise_for :users

I manage to over-write profile, forgot, register bug not login:

So when I click on the link "Sign up" link in the generic Devise Login form I am redirected to /register in the browser, but when I click the "Sign in" link I am still redirected to /users/sign_in rather than login.

I tried match vs. post + get for the routes but without luck. I know that if I generate the forms myself I can decide how the links look like, but I would prefer to user the generic devise forms and also I am curious why the other routes work.

Running rake routes produces this (with the top five rows from my routes):

        new_user_session GET    /account/login(.:format)           devise/sessions#new
            user_session POST   /account/login(.:format)           devise/sessions#create
    destroy_user_session DELETE /account/logout(.:format)          devise/sessions#destroy
           user_password POST   /account/password(.:format)        devise/passwords#update
       new_user_password GET    /account/password/forgot(.:format) devise/passwords#new
      edit_user_password GET    /account/password/edit(.:format)   devise/passwords#edit
        account_password PUT    /account/password(.:format)        devise/passwords#update
cancel_user_registration GET    /account/cancel(.:format)          devise/registrations#cancel
       user_registration POST   /account(.:format)                 devise/registrations#create
   new_user_registration GET    /account/register(.:format)        devise/registrations#new
  edit_user_registration GET    /account(.:format)                 devise/registrations#edit
                 account PUT    /account(.:format)                 devise/registrations#edit
                         DELETE /account(.:format)                 devise/registrations#destroy
        new_user_session GET    /users/sign_in(.:format)           devise/sessions#new
                         POST   /users/sign_in(.:format)           devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)          devise/sessions#destroy
                         POST   /users/password(.:format)          devise/passwords#create
                         GET    /users/password/new(.:format)      devise/passwords#new
                         GET    /users/password/edit(.:format)     devise/passwords#edit
                         PUT    /users/password(.:format)          devise/passwords#update
                         GET    /users/cancel(.:format)            devise/registrations#cancel
                         POST   /users(.:format)                   devise/registrations#create
                         GET    /users/sign_up(.:format)           devise/registrations#new
                         GET    /users/edit(.:format)              devise/registrations#edit
                         PUT    /users(.:format)                   devise/registrations#update
                         DELETE /users(.:format)                   devise/registrations#destroy
                root        /                                  posts#show

Update: I am now mimicking all of devise's routes (See updated routes.rb). But I am still redirected to /users/sign_in

Besi
  • 22,579
  • 24
  • 131
  • 223

2 Answers2

3

You can try this, This is working

see more help devise wiki

   devise_for :users, :path => '', :path_names => {:sign_in => 'login', :sign_out => 'logout'}
Amar
  • 6,874
  • 4
  • 25
  • 23
2

This should work. Also remove the /account and add path account to your routes file like I've done below.

  devise_scope :user, path: "account" do
    get "login", :to => "devise/sessions#new", :as => "login"
    get "signup" => "users/registrations#new", :as => "register"
    get "edit" => "edit_user_registration", :as => "edit"
  end
coletrain
  • 2,809
  • 35
  • 43