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 omniauth在一种方法中使用。
例如,
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”。 (仅适用于一个区域设置!)
- Facebook令牌到期和续约,与考拉和omniauth-facebook
- 如何在Ruby on Rails应用程序中拯救OAuth :: Unauthorizedexception?
- Facebook登录OmniAuth错误更改被拒绝
- Unicorn和omniauth-facebook – 未初始化的恒定OmniAuth
- OmniAuth不适用于Rails3中的Route Globbing
- Rails 4 Devise / Omniauth电子邮件存在于数据库错误中
- Rails 3 – 使用OmniAuth设计 – 登录后重定向转到/ users / sign_in
- 设计Oauth Twitter:OAuth ::未经授权的禁止403
- Rails:在Omniauth使用Devise登录后从Facebook检索图像