Devise,OmniAuth和Facebook:"没找到.身份验证passthru."

orb*_*ven 11 ruby-on-rails devise omniauth

试着跟随https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview,我很难过.

我已经config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']在我的routes.rb中配置了我的config/initializers/devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }devise.rb,并定义了一个OmniAuthCallbacks控制器.

当我访问时user_omniauth_authorize_path(:facebook),我得到: Not found. Authentication passthru.我不确定接下来该做什么.我没有使用路由全球,所以我不认为我需要定义一个passthru方法,但这样做只给了我404.

Reg*_*ieB 10

还要确保已添加到OmniauthCallbacksController的路由:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
Run Code Online (Sandbox Code Playgroud)

并且您已将更新添加到用户模型中的设计声明中:

devise :omniauthable, :omniauth_providers => [:facebook]
Run Code Online (Sandbox Code Playgroud)


Ale*_*ine 7

所以我在打开一个旧项目之后对此进行了标记,并且在看到我的授权网址之后发布了类似"user/auth/facebook.facebook"之类的内容时,我运行了一个rake路由并通过更改来解决它

<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>
Run Code Online (Sandbox Code Playgroud)

<%= link_to "Sign in with Facebook", user_facebook_omniauth_authorize_path %>
Run Code Online (Sandbox Code Playgroud)

显然,自rake routes返回命令后,omniauth路由的帮助程序已更改:

user_facebook_omniauth_authorize   GET|POST   /users/auth/facebook(.:format)          omniauth_callbacks#passthru
Run Code Online (Sandbox Code Playgroud)

而不是几个月前我开始这个项目的时候.

user_omniauth_authorize            GET|POST   /users/auth/facebook(:provider)          omniauth_callbacks#passthru
Run Code Online (Sandbox Code Playgroud)

希望这篇文章能帮到别人.

  • 对我来说,两条路线都会导致““未找到。身份验证通过。” 页 (3认同)

Was*_*lho 7

当您尝试使用link_to请求为GET.

  1. 您需要将其更改为button_to将创建表单的位置。
  2. 或者,如果您有 ,则可以使用link_towith ,但我建议您使用表单,因为它上面有 CSRF ;method: :postrails-ujs
  3. 您需要添加 gemomniauth -rails_csrf_protection以避免真实性错误。


小智 6

我有同样的错误.
对我config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']有用的是重新启动rails服务器,以反映我对config/initializers/devise.rb所做的更改.


orb*_*ven 5

我应该早点列出这个,但我最终采用了“退出并重试”的方法;我删除了与 OmniAuth 相关的所有内容,并按照说明重新开始。我希望我知道什么,特别是我错了,但不幸的是,一旦我重试,它就“起作用了”。

tl;dr 按照https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview 中的步骤进行操作,它应该可以工作


kim*_*mos 5

看到Not found. Authentication passthru.意味着 Omniauth 控制器未捕捉到路线。这很可能是因为路由是通过 GET 到达的,但截至最近,默认情况下仅支持 POST。

天真的答案以及对Google Oauth2 整数的建议是简单地重新启用 GET 请求:

OmniAuth.config.allowed_request_methods = [:get]
Run Code Online (Sandbox Code Playgroud)