在OmniAuth中处理OmniAuth :: Strategies :: OAuth2 :: CallbackError

时间:2014-04-16 17:14:03

标签: ruby-on-rails ruby ruby-on-rails-4 omniauth

我该如何处理错误:

OmniAuth::Strategies::OAuth2::CallbackError

...当用户进入Facebook登录时由OmniAuth生成,但决定取消?

我已经看到了一些关于此的线索,但没有一个解决方案对我有效。

我试过这个:

OmniAuth.config.on_failure = UsersController.action(:oauth_failure)

...进入omniauth.rb初始值设定项文件但没有成功。

我在 Rails 4.0.2 中使用 omniauth-facebook gem。

非常感谢任何帮助。

非常感谢! 迈克尔。

我的gemfile.lock文件显示以下与omniauth-facebook gem相关的宝石:

oauth2 (0.8.1)
  faraday (~> 0.8)
  httpauth (~> 0.1)
  jwt (~> 0.1.4)
  multi_json (~> 1.0)
  rack (~> 1.2)
omniauth (1.1.4)
  hashie (>= 1.2, < 3)
  rack
omniauth-facebook (1.5.1)
  omniauth-oauth2 (~> 1.1.0)
omniauth-oauth2 (1.1.1)
  oauth2 (~> 0.8.0)
  omniauth (~> 1.0)

1 个答案:

答案 0 :(得分:1)

我将omniauth-facebook gem升级到版本 1.0.6 ,现在它按预期工作。

对于其他遇到此问题且希望捕获此错误的人,以下是您的需求:

<强> /config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do

    provider :facebook, 'xxx', 'xxx', scope: "email,publish_stream,user_location,user_birthday"

end

<强> /config/initializers/omniauth_failure_callback.rb

OmniAuth.config.on_failure = Proc.new do |env|

    UsersController.action(:omniauth_failure).call(env)

end

<强> /app/controllers/users_controller.rb

def omniauth_failure

    flash[:danger] = "Unable to connect with Facebook at this time."
    redirect_to root_url

end