Devise,OmniAuth和Facebook:“没找到。 身份validationpassthru。“

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

我的config / initializers / devise.rb, devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }在我的routes.rb中,并定义了一个OmniAuthCallbacks控制器。

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

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

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

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

 devise :omniauthable, :omniauth_providers => [:facebook] 

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

 <%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %> 

 <%= link_to "Sign in with Facebook", user_facebook_omniauth_authorize_path %> 

显然,自从rake routes命令返回后,omniauth路由的助手已经改变:

 user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format) omniauth_callbacks#passthru 

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

 user_omniauth_authorize GET|POST /users/auth/facebook(:provider) omniauth_callbacks#passthru 

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

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

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

tl; dr遵循https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview逐字记录中的步骤,它应该工作

对于任何想要知道如何解决这个问题的人,只需声明一个passthru方法,或者做我做的事情,即使用action_missing (不是method_missing ,在Rails 4中不推荐使用它!)来捕获所有users / auth /:provider urls omn​​iauth在一种方法中使用。

例如,

 class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def action_missing(provider) # Set up authentication/authorizations here, and distribute tasks # that are provider specific to other methods, leaving only tasks # that work across all providers in this method. end 

我希望能帮助其他任何被困在这里的人,我确实做到了。

我今天花了整整一天试图追踪这个问题,我终于在回到git历史的时候发现了它,因为它过去曾经工作过。

事实certificate,以某种方式切换语言环境的路由filter是邪恶的根源。 我刚刚在我的路线中禁用了filter :locale方法,授权请求进入了facebook。 血淋淋的地狱,我很高兴我终于发现了那个:)

尝试在设计初始化程序( config / initializers / devise.rb )文件中设置omniauth_path_prefix。

对于用户类:

 config.omniauth_path_prefix = "/users/auth" 

对于其他类(例如,当您使用Account而非User)时:

 config.omniauth_path_prefix = "/accounts/auth" 

翻译路线(我的情况)也是如此。 我已将’用户’翻译成’blabla’。 要让它工作,我必须将前缀设置为“/ blabla / auth”。 (仅适用于一个区域设置!)