57 votes

Concevoir de redirection après la connexion échoue

Toutes les questions que j'ai trouvé sont liées pour une connexion réussie avec l'aide after_sign_in_path_for(ressource)

J'ai un formulaire de connexion dans l'index du site, et lorsque la connexion échoue, elle redirige vers "utilisateurs/sign_in"

Mais comment puis-je rediriger vers mon site "#index" lorsque la connexion échoue?

95voto

Marcao Points 689
  1. Créer un custom_failure.rb dans le répertoire lib, avec:

    class CustomFailure < Devise::FailureApp
      def redirect_url
        your_path
      end
    
      def respond
        if http_auth?
          http_auth
        else
          redirect
        end
      end
    end
    
  2. En vous à l'élaboration d'initialiseur, comprennent:

      config.warden do |manager|
        manager.failure_app = CustomFailure
      end
    
  3. Assurez-vous que les Rails sont loadin vos fichiers lib, dans votre application.rb :

    config.autoload_paths += %W(#{config.root}/lib)
    

N'oubliez pas de redémarrer votre serveur.

Je ne pense pas qu'il ya un moyen plus facile de le faire. Bonne chance.

14voto

Sibevin Wang Points 687

Si vous utilisez votre propre SessionsController, vous pouvez ré-affecter l' :recall de la valeur de auth_options de rappeler l' controller#method vous voulez avant d'exécuter warden.authenticate!(auth_options), par exemple:

dans app/controllers/utilisateurs/sessions_controller.rb

class Users::SessionsController < Devise::SessionsController
  #...
  def create
    #...
    auth_options = { :recall => 'site#index', :scope => :user }
    resource = warden.authenticate!(auth_options)
    #...
  end
  #...
end

Avec cette façon, vous n'avez pas besoin de créer de la mesure FailureApp et de modifier les configs.

3voto

pmontrasio Points 95

C'est ce qui arrive à concevoir 3.1.0

Started POST "/users/sign_in"
Processing by Devise::SessionsController#create
Completed 401 Unauthorized
Processing by Devise::SessionsController#new

la nouvelle est appelée à cause de la auth_options définie à la fin de gems/concevoir-3.1.0/app/controllers/concevoir/sessions_controller.rb

Vous devez redéfinir la auth_options utilisé dans l'action de création. J'ai copié le contrôleur dans app/controllers/concevoir/sessions_controller.rb de mon application Rails et a remplacé le auth_options méthode comme ceci

def auth_options
  { :scope => resource_name, :recall => "Home#new" }
end

Il fait le tour, mais l'url est toujours /utilisateurs/sign_in

Je vais essayer de corriger cela.

1voto

MikeH Points 576

Vous pouvez modifier la valeur par défaut sign_in chemin.

Découvrez https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X