Comment sauver OmniAuth::Stratégies::OAuth2::CallbackError?
Je suis la construction d'une application Rails avec Omniauth vous connecter au service.Pour authentifier Google, je suis en utilisant OmniAuth Google OAuth2 Stratégie.
Lorsque l'utilisateur clique sur "autoriser l'accès" sur le bouton, tout fonctionne bien.Mais lorsque l'utilisateur clique sur 'non merci' bouton ci-dessous l'erreur est générée.
OmniAuth::Strategies::OAuth2::CallbackError
J'ai essayé d'ajouter le dessous de sauvetage de code dans l'application du contrôleur.
class ApplicationController < ActionController::Base
rescue_from OmniAuth::Strategies::OAuth2::CallbackError, :with =>
:omniauth_callback_error_handler
protected
def omniauth_callback_error_handler
redirect_to init_sign_in_users_path
end
end
Mais pas de chance.
Une idée?
Merci 🙂
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que l'authentification se passe dans un middleware pour votre contrôleur n'est pas impliqué. C'est où l'exception est soulevée et le code est cette
Je pense que vous pouvez gérer ce genre d'erreur de la part de la définition d'un rappel dans Omniauth initialiseur avec ce genre de code
Sinon, il y a un commit de trois mois pour introduire ce comportement
qui stipule que sur les erreurs de votre utilisateur est redirigé vers
/auth/failure
avec un message d'erreur, donc vous devriez être en mesure de définir une voie de chemin et de les traiter dans votre application. Gardez à l'esprit que cela n'arrivera pas le mode de développement si vous avez besoin de l'essayer dans un autre envs. Si cela n'arrive pas dans la production essayez de mettre à niveau votre omniauth gem à la version 1.1.0OmniAuth
au lieu deOmniauth
. Ressemble à la capitalisation a changé.OmniAuth.config.failure_raise_out_environments = []
Vous pouvez définir la on_failure proc dans le omniauth initialiseur dans un même nettoyeur de mode:
request.path.split('/').third
pour l'obtenirJ'ai résolu ce problème avec la Fabio première suggestion.
Dans mon UsersController
"UsersController".constantize
. J'ai été en mesure d'appeler directementUsersController.action
parce que ce code est dans un bloc qui sera exécuté plus tard.Onmiauth
àOmniAuth
request.path.split('/').third
pour l'obtenirIl y a une configuration à utiliser
/auth/failure
au lieu de lever une erreur.- Je utiliser OmniAuth 1.2.2 et quand je la vérification de la FailureEndpoint j'ai trouvé le code, c'est comme cette:
Et la
failure_raise_out_environments
est défini ici:L'environnement peut être configuré de sorte que la solution est facile. J'utilise Rails alors j'ai mis de code ci-dessous dans un initializer: