J'utilise le logiciel et j'ai une petite question. Comment puis-je rediriger le: authenticate_user! before_filter sur la page d'inscription de l'utilisateur au lieu de vous connecter? J'ai parcouru https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb mais je n'ai pas eu beaucoup de chance de trouver une solution.
Vous allez devoir créer un FailureApp personnalisé qui hérite de FailureApp de Devise, comme indiqué ici: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page -lorsque l'utilisateur peut ne pas être authentifié
J'ai eu un problème similaire où je devais rediriger vers l'inscription si l'utilisateur n'était pas connecté. Je l'ai corrigé en ajoutant une méthode à application_controller.rb et en l'utilisant comme filtre avant dans les autres contrôleurs.
Gardez à l’esprit que c’est une solution temporaire, car elle évite de nombreuses abstractions.
before_filter :auth_user
def auth_user
redirect_to new_user_registration_url unless user_signed_in?
end
J'ai ajouté une page wiki montrant la bonne façon de faire cela avec une application en échec (comme Steven l'avait initialement laissé entendre):
La clé est de remplacer la méthode route
, comme ceci:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
:new_user_registration_url
end
end
puis demandez à Devise d'utiliser votre application d'échec:
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = MyFailureApp
end
Cette approche est préférable au remplacement de authenticate_user!
dans votre contrôleur car cela ne gênera pas beaucoup de choses "en coulisse" que Devise fait, telles que le stockage de l'URL tentée afin que l'utilisateur puisse être redirigé après une connexion réussie.
Si vous avez des ressources Admin
et User
Devise, vous voudrez probablement conserver la fonctionnalité par défaut de "nouvelle session" pour les administrateurs. Vous pouvez le faire assez facilement en vérifiant quel type d'étendue est en cours de traitement:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
scope.to_sym == :user ? :new_user_registration_url : super
end
end