web-dev-qa-db-fra.com

Comment supprimer/désactiver Sign Up from Devise

J'essaie de supprimer/désactiver le chemin "utilisateur/sign_up" de Devise. Je le fais parce que je ne veux pas que des personnes aléatoires aient accès à l'application. 

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

...

devise_for :users, :skip => :registration

end

Cependant, cela casse <%= link_to "Profile", edit_user_registration_path, class: "btn btn-info btn-flat" %>

que je veux conserver pour que les utilisateurs puissent mettre à jour leur profil ... Je sais que c'est à cause du devise_for :users, :skip => :registration

Existe-t-il une solution à ce problème?

Fonctionnement

Devise (4.2.0, 4.1.1, 4.1.0)

Rails 4.2.5

Ruby 2.3.0p0 (2015-12-25 révision 53290) [x86_64-linux]

19
M.T Davis

Solution pour supprimer le chemin sign_up de Devise

Entrez ce qui suit au début de 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

... Après la déclaration ci-dessus, ajoutez ce qui suit dans 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

Cela supprimera/désactivera le chemin user/sign_up pour Devise sans interrompre edit_user_registration_path 

Redémarrez votre serveur Rails et cela devrait fonctionner.

9
M.T Davis

Le moyen le plus simple consiste simplement à supprimer le module de carte ": enregistrable" de la liste par défaut définie dans votre modèle (le nom de classe utilisé par les utilisateurs de l'application, généralement Utilisateur ).

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

  ...
end

Donc vous l'aurez comme ceci:

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

  ...
end
36
jcgil

Puisque as n'est qu'un alias pour devise_scope, vous pouvez mettre tout cela dans un seul bloc.

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
4
Tomislav Mikulin

Je viens d'avoir le même problème. Ma solution est un mélange de ces réponses:

Premier commentaire/Supprimer le :registerable sur user.rb

class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end Deuxièmement, supprimez les chemins d’inscription de la carte dans routes.rb

devise_for :users, :skip => [:registrations] , controllers: { sessions: 'users/sessions' }

Maintenant, Google ignorera tous les liens d’enregistrement de leur vue et vous n’aurez plus les chemins d’enregistrement sur vos itinéraires.

2
David Roth

Le code ci-dessous semble faire l'affaire pour moi:

Rails.application.routes.draw do

  devise_scope :users do #notice "users" here, not "user"
    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

  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
...
0
Amir Rajak