J'utilise Devise dans une application Rails 3, mais dans ce cas, un utilisateur doit être créé par un utilisateur existant, qui détermine les autorisations dont il disposera.
Pour cette raison, je veux :
- A supprimer l'itinéraire d'inscription des utilisateurs .
- A permettent toujours aux utilisateurs de modifier leur profil (changer l'adresse e-mail et le mot de passe) après ils se sont inscrits
Comment puis-je le faire ?
Actuellement, je supprime effectivement cette route en plaçant ce qui suit avant devise_for :users
:
match 'users/sign_up' => redirect('/404.html')
Ça marche, mais j'imagine qu'il y a un meilleur moyen, non ?
Mise à jour
Comme Benoit Garret l'a dit, la meilleure solution dans mon cas est de ne pas créer les routes d'enregistrement en masse et de ne créer que celles que je veux vraiment.
Pour ce faire, j'ai d'abord lancé rake routes
puis j'ai utilisé le résultat pour recréer ceux que je voulais. Le résultat final était le suivant :
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
Notez que :
- J'ai toujours
:registerable
dans monUser
modèle -
devise/registrations
gère la mise à jour de l'email et du mot de passe - La mise à jour des autres attributs de l'utilisateur - permissions, etc. - est gérée par un autre contrôleur.
Réponse réelle :
Supprimer la route pour les chemins Devise par défaut ; c'est-à-dire :
devise_for :users, path_names: {
sign_up: ''
}
4 votes
En fait, je pense que votre solution originale était beaucoup plus simple et claire. Y a-t-il un réel problème de sécurité ?
0 votes
Pour une raison quelconque, votre solution mise à jour a continué à produire une erreur disant que j'avais besoin de l'ID. Après une heure d'arrachage de cheveux et de nombreux redémarrages du serveur, le problème s'est résolu de lui-même. Je n'en ai aucune idée... mais si quelqu'un d'autre rencontre ce problème, continuez à essayer !
0 votes
@counterbeing - aucun problème à ma connaissance, je n'aimais pas avoir des routes inutilisées ou dépendre de la commande.
1 votes
"Réponse réelle" ne tue pas complètement l'itinéraire s'il est redirigé à partir du contrôleur de devise. Le comportement par défaut vous conduira toujours vers le chemin d'accès à l'inscription si vous tapez sur une route GET du type
https://example.com/users/
. Voir ma réponse ci-dessous.1 votes
Défaut de sécurité ! La "réponse réelle" qui est affichée ne fait que supprimer le formulaire d'inscription, elle ne fait PAS disparaître la route POST qui crée l'utilisateur.
0 votes
path_names
est utile pour désactiver l'ouverture de session. Pour la déconnexion, j'ai supprimé le module enregistrable du modèle d'utilisateur.