试着跟随https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview,我很难过。
我的配置/初始化器/ devise.rb中有config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']
,在routes.rb中有devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
,并且定义了OmniAuthCallbacks控制器。
当我访问user_omniauth_authorize_path(:facebook)
时,我得到:Not found. Authentication passthru.
我不知道下一步该做什么。我没有使用路由全球,所以我不认为我需要定义一个passthru方法,但这样做只给了我404。
还要确保已添加到OmniauthCallbacksController的路由:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
并且您已将更新添加到用户模型中的设计声明中:
devise :omniauthable, :omniauth_providers => [:facebook]
所以我在打开一个旧项目之后对此进行了标记,并且在看到我的授权网址之后发布了类似“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
希望这篇文章能帮到别人。
我有同样的错误。
对我有用的是重新启动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历史中找到它,因为它过去曾经工作过。
事实证明,以某种方式切换语言环境的路由过滤器是邪恶的根源。我刚刚在我的路线中禁用了filter :locale
方法,授权请求进入了facebook。血淋淋的地狱,我很高兴我终于发现了那个:)
尝试在设计初始化程序(config / initializers / devise.rb)文件中设置omniauth_path_prefix。
对于用户类:
config.omniauth_path_prefix = "/users/auth"
对于其他课程(例如,当您使用帐户而不是用户时):
config.omniauth_path_prefix = "/accounts/auth"
翻译路线(mycase)也是如此。我已将'用户'翻译成'blabla'。为了让它工作,我必须将前缀设置为“/ blabla / auth”。 (仅适用于一个区域设置!)