Les contrôleurs dans le système sont-ils automatiquement générés? Comment y accédez-vous?
Je sais pour les vues que vous faites Rails generate devise_views
.
Devise utilise des contrôleurs internes, auxquels vous pouvez accéder et sous-classer dans votre propre code. Ils sont dans le module Devise
. Par exemple, pour étendre la RegistrationsController
:
class MembershipsController < Devise::RegistrationsController
# ...
end
Ensuite, tout ce que vous avez à faire est de configurer les itinéraires de Devise pour utiliser votre contrôleur à la place:
devise_for :members, :controllers => { :registrations => 'memberships' }
En supposant que vous souhaitiez voir ces contrôleurs afin de les modifier ou de les remplacer, Devise fournit désormais un simple générateur qui recrée leurs contrôleurs dans votre application pour faciliter les choses. Selon la documentation (qui sera la plus récente):
1) Créez vos contrôleurs personnalisés à l'aide du générateur qui nécessite une portée:
console
Rails generate devise:controllers [scope]
Si vous spécifiez users
comme portée, les contrôleurs seront créés dans app/controllers/users/
. Et le contrôleur de sessions ressemblera à ceci:
class Users::SessionsController < Devise::SessionsController
# GET /resource/sign_in
# def new
# super
# end
...
end
2) Indiquez au routeur d'utiliser ce contrôleur:
devise_for :users, controllers: { sessions: "users/sessions" }
3) Copiez les vues de devise/sessions
à users/sessions
. Le contrôleur ayant été modifié, il n'utilise pas les vues par défaut situées dans devise/sessions
.
4) Enfin, modifiez ou étendez les actions du contrôleur souhaitées.
Vous pouvez complètement annuler une action du contrôleur:
class Users::SessionsController < Devise::SessionsController
def create
# custom sign-in code
end
end
Ou vous pouvez simplement y ajouter un nouveau comportement:
class Users::SessionsController < Devise::SessionsController
def create
super do |resource|
BackgroundWorker.trigger(resource)
end
end
end
Ceci est utile pour déclencher des travaux en arrière-plan ou pour consigner des événements lors de certaines actions.
N'oubliez pas que Devise utilise des messages flash pour informer les utilisateurs du succès ou de l'échec de la connexion. Devise s'attend à ce que votre application appelle flash[:notice]
et flash[:alert]
selon le cas. N'imprimez pas l'intégralité du hachage du flash, imprimez uniquement des touches spécifiques. Dans certaines circonstances, Devise ajoute une touche :timedout
au hash flash, qui n'est pas destiné à l'affichage. Supprimez cette clé du hachage si vous souhaitez imprimer l'intégralité du hachage.
$ Rails generate devise:controllers SCOPE [options]
Options: -c, [--controllers = un deux trois]
Utilisez -c pour spécifier quel contrôleur vous voulez écraser . Si vous ne spécifiez pas de contrôleur, tous les contrôleurs seront créés . Par exemple:
Les Rails génèrent des cartes: contrôleurs utilisateurs -c = sessions
Cela va créer une classe de contrôleur dans app/controllers/users/sessions_controller.rb comme ceci:
class Users::ConfirmationsController < Devise::ConfirmationsController
content...
end
Ci-dessous, un pour Rails 5
Générez des contrôleurs de conception Rails en utilisant la commande suivante:
Rails generate devise:controllers users
si vous avez modifié les contrôleurs générés ci-dessus, ajoutez la ligne suivante au routes.rb
,
devise_for :users, controllers: {registrations:'user/registrations'}
Vos modifications prendront effet une fois que vous aurez redémarré le serveur Rails.
voir la réponse de @ ErikTrautman.
vous devez inspecter la source (plus précisément dans le répertoire app/
de la racine du projet). @MatheusMoreira fournit un lien vers la source sur GitHub, mais si vous préférez le parcourir localement dans votre propre éditeur de texte, vous pouvez trouver l'emplacement d'installation de la pierre Devise avec gem which devise
.
Par exemple, pour voir Devise::SessionsController
:
$ vim $(gem which devise | sed 's|\(.*\)\(/.*\)\{2\}|\1|')/app/controllers/devise/sessions_controller.rb
(Ou vous pouvez simplement cloner le dépôt git et fouiller de cette façon.)
$ git clone https://github.com/plataformatec/devise
$ cd devise
$ vim app/controllers/devise/sessions_controller.rb