How do I remove the Devise route to sign up?

后端 未结 15 2366
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-07 07:36

I\'m using Devise in a Rails 3 app, but in this case, a user must be created by an existing user, who determines what permissions he/she will have.

Because of this, I

相关标签:
15条回答
  • 2020-12-07 08:32

    For others in my case.
    With devise (3.5.2).
    I successfully removed the routes to signup, but kept the ones to edit the profile, with the following code.

    #routes.rb
    devise_for :users, skip: [:registrations]
    as :user do
      get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
      put '/users(.:format)' => 'devise/registrations#update', as: 'user_registration'
      patch '/users(.:format)' => 'devise/registrations#update'
    end
    
    0 讨论(0)
  • 2020-12-07 08:33

    Here's the slightly different route I went. It makes it so you don't have to override the devise/shared/_links.html.erb view.

    In app/models/user.rb:

    devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
    

    In config/routes.rb:

    devise_for :users
    devise_scope :user do
      put 'users' => 'devise/registrations#update', as: 'user_registration'
      get 'users/edit' => 'devise/registrations#edit', as: 'edit_user_registration'
      delete 'users' => 'devise/registrations#destroy', as: 'registration'
    end
    

    Before:

    $ rake routes | grep devise
               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
                                PATCH  /users/password(.:format)                   devise/passwords#update
                                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
                                PATCH  /users(.:format)                            devise/registrations#update
                                PUT    /users(.:format)                            devise/registrations#update
                                DELETE /users(.:format)                            devise/registrations#destroy
    

    After:

    $ rake routes | grep devise
               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
                                PATCH  /users/password(.:format)                   devise/passwords#update
                                PUT    /users/password(.:format)                   devise/passwords#update
              user_registration PUT    /users(.:format)                            devise/registrations#update
         edit_user_registration GET    /users/edit(.:format)                       devise/registrations#edit
                   registration DELETE /users(.:format)                            devise/registrations#destroy
    
    0 讨论(0)
  • 2020-12-07 08:37

    Instead of searching for a hard solution. I used the below approaches.

    1. Delete the sign_up form from page (path devise/registrations/new.html.erb) and replace it with custom info.

    2. Redirect the incoming traffic to some other page. Like below in routes.rb

        get "/users/sign_up", to: redirect('/')
    
        post "/users/sign_up", to: redirect('/')
    

    Make sure to write it before devise_for :users

    0 讨论(0)
提交回复
热议问题