Devise,OmniAuth和Facebook:“没找到。身份验证passthru。“

问题描述 投票:11回答:7

试着跟随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。

ruby-on-rails devise omniauth
7个回答
10
投票

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

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

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

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

7
投票

所以我在打开一个旧项目之后对此进行了标记,并且在看到我的授权网址之后发布了类似“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

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


6
投票

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


4
投票

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

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


4
投票

对于任何想知道如何解决这个问题的人,只需声明一个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

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


1
投票

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

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


0
投票

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

对于用户类:

config.omniauth_path_prefix = "/users/auth"

对于其他课程(例如,当您使用帐户而不是用户时):

config.omniauth_path_prefix = "/accounts/auth"

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

© www.soinside.com 2019 - 2024. All rights reserved.