How to Remove/Disable Sign Up From Devise

The easiest way is just removing :registerable devise module from the default list defined into your Model (the class name used for the application’s users, usually User).

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  ...
end

So you'll have it like this:

class User < ActiveRecord::Base
  devise :database_authenticatable,
         :recoverable, :rememberable, :trackable, :validatable

  ...
end

I just had the same issue. My solution is a mix of these answers.

  1. Comment out or remove :registerable in user.rb:
class User < ActiveRecord::Base
  devise :database_authenticatable, #:registerable,
         :recoverable, :rememberable, :trackable, :validatable
end
  1. Remove the registration paths from devise_for in routes.rb:
devise_for :users, :skip => [:registrations], controllers: {
  sessions: 'users/sessions'
}

Now Devise will skip all of the registration links from their view and also you no longer have the registration paths on your routes.


Since as is just an alias for devise_scope, you can put all that in just one block.

devise_for :users, skip: [:registrations]
as :user do
  get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
  get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
end

Solution to removing sign_up path from Devise

Enter the following at the beginning of routes.rb

Rails.application.routes.draw do
  devise_scope :user do
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
  end

...After the statement above, add the following below in routes.rb

devise_for :users, :skip => [:registrations] 
  as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
  end

This will remove/disable the user/sign_up path for Devise without breaking edit_user_registration_path

Restart your rails server and it should work.