2

我正在使用 rails 3.2.11 和 omniauth gem 来验证用户的 Facebook 帐户。

宝石文件

gem 'omniauth-facebook', '1.4.0'. 

/config/initializers/omniauth.rb

require 'facebook'
Rails.application.config.middleware.use OmniAuth::Builder do
   provider :facebook, "#{Facebook::APP_ID.to_s}", "#{Facebook::SECRET.to_s}" ,{:scope => "email, offline_access, manage_pages"}
end

路线.rb

match "/auth/:provider/callback" => "public_new_pages#auth_callback", :as => :callback
match "/auth/failure" => "public_new_pages#failure", :as => :failure

我想使用 Facebook 图形 API 访问大品牌 Facebook 页面的专辑图片。我不能一直得到。它适用于一些 Facebook 页面。无法找到正确的解决方案,为什么我收到如下错误并且我的页面崩溃了。

In browser I see Internal server error 500. and in console I see the error 
below when I tried to create a big site called "BMW"
Started GET "/auth/facebook/callback" for 66.249.74.126 at 2013-03-17 01:10:45
**OmniAuth::Strategies::Facebook::NoAuthorizationCodeError 
(must pass either a `code` parameter or a signed request** 
(via `signed_request` parameter or a `fbsr_XXX` cookie)):
omniauth-facebook (1.4.0) lib/omniauth/strategies/facebook.rb:177:in 
`with_authorization_code!'

有什么解决办法吗?

谢谢!

4

3 回答 3

1

我认为回调不需要根 url,您可以使用 route.rb 重定向到任何 url,我遇到了同样的错误,我发现这是由于我在身份验证范围内使用的权限名称已弃用,例如在我的提供商的错误时间看起来像

 provider :facebook, '2947293729hwehrk', '036e67ce6345cf9',
  :scope => 'email,user_birthday,read_stream'

但是当我删除时read_stream,错误消失了:)

注意:我确定回调网址,因为我自己使用以下配置

在 facebook 控制台中,我的 URL 看起来像

http://localhost:3000/

我的回调路线如下

  get 'auth/:provider/callback', to:  'sessions#create'

它工作正常:)

于 2015-10-17T09:18:45.367 回答
0

尝试将您的回调 URL 更改为您网站的根目录。

omn​​iauth-facebook 中的这个问题讨论了完全相同的错误。

于 2013-03-17T08:54:38.480 回答
0

据我所知,FB 不再允许使用 localhost:3000 作为应用程序域或站点 URL。您必须创建一个“新的”本地主机,基本上,将您的本地主机屏蔽为可接受的 URL(即http://my.computer.com:3000)。可以在此处找到有关如何为 Mac 执行此操作的说明:https ://www.imore.com/how-edit-your-macs-hosts-file-and-why-you-would-want 。这个新的本地主机 URL 需要在 FB 应用程序设置中的 3 个位置出现 - 在“应用程序域字段”的设置中,在设置页面底部的“站点 URL”字段中,以及在“有效 OAuth 重定向 URIs”字段中FB登录产品页面。另外,如果您使用的是 Rails 5.1+,请不要忘记将 jquery 添加到您的 rails 应用程序。

于 2017-10-16T22:23:36.683 回答