5

当我尝试使用 Omniauth 和 Devise 登录 Facebook 时,passthru调用而不是facebook. 我如何通过link_to

user_omniauth_authorize_path(:facebook)

我已经多次修改代码并尝试使用这条路线:

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } do
    get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
  end

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 

但错误是一样的。我有我的facebook行动users/omniauth_callbacks_controller.rb

4

4 回答 4

3

我只是在几个小时内遇到完全相同的问题,尝试了所有事情,包括使用 github oauth 在不同的分支上执行完全相同的过程,这没有问题。最终对我有用的是在应用令牌和秘密之后更改我在 devise.rb 中传递给 config.omniauth 的参数的哈希值。就是name: 'google'这样做的。将其注释掉并且有效:

config.omniauth :google_oauth2, 'ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"],
   {
    # name: 'google',
    scope: 'calendar, plus.login plus.me'
  }

id 和 secret 是否被硬编码没有影响。我没有尝试过,但:name似乎它被用作提供程序的别名,以便在代码中的其他地方使用来代替:google_oauth2. 取消注释并将其(冗余)更改为name: google_oauth2有效。我确定您已经解决了它或一年后继续前进,但我希望这对将来的某人有所帮助。

onmiauth-google-oauth2 0.2.5

设计 3.4.0

导轨 4.1.6

于 2014-10-30T03:56:56.720 回答
2

在我的例子中,我们添加了 gem omniauth-rails_csrf_protection但我们仍在尝试使用GET方法访问授权端点。通过请求(使用 CSRF 令牌)替换这些GET调用解决了它。POST

于 2019-11-13T14:56:22.253 回答
0

您是否在 devise.rb 中添加了配置?
您需要在 (config/initializers/devise.rb) 中声明提供程序并要求它

require "omniauth-facebook" 
config.omniauth :facebook, "APP_ID", "APP_SECRET"

您还需要重新启动服务器。

于 2013-10-10T15:42:58.493 回答
0

passthru条路线是omniauth过去的古老遗物。

只需像这样设置您的路线:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
于 2013-07-11T02:42:44.923 回答