I am building a Rails application with Omniauth for log in service.To authenticate Google I am using OmniAuth Google OAuth2 Strategy.
When user clicks 'allow access' button everything works fine.But when user clicks 'no thanks' button the below error is raised.
OmniAuth::Strategies::OAuth2::CallbackError
I have tried adding the below rescue code in application controller.
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
But no luck.
Any idea?
Thank you :)
There's a configuration to use
/auth/failure
instead of raising an error.I use OmniAuth 1.2.2 and when I checking the FailureEndpoint I found the code is like this:
And the
failure_raise_out_environments
is defined here:The environment can be configured so the solution is easy. I use Rails so I put below code in an initializer file:
I have solved this problem with the Fabio's first suggestion.
In my UsersController
You can set the on_failure proc in the omniauth initializer in an even cleaner fashion:
This happens because the authentication happens in a middleware so your controller is not involved in it. This is where the exception is raised and the called code is this
I think you can handle this kind of error by defining a callback in Omniauth initializer with this kind of code
Otherwise there is a commit of three months ago which introduce this behavior
which states that on errors your user is redirected to
/auth/failure
with an error message, so you should be able to define a route for that path and handle it in your app. Keep in mind that this won't happen in development mode so you need to try it in other envs. If this doesn't happen in production try to upgrade your omniauth gem to version 1.1.0