无法 add/publish 在 Facebook 上订阅实时更新

Not able to add/publish subscrption on facebook for real time updates

我正在尝试通过 Graph API Explorer add/publish 订阅 real time updates。这是我要求的 POST url

https://graph.facebook.com/v2.2/{app_id}/subscriptions/?object=user&fields=friends&verify_token=thisisaverifystring&access_token=my_app_token&callback_url=http://mydomain/auth/facebook/callback/

但我收到错误响应:

{ "error":{ "message": "(#2200) 回调验证失败:", "type": "OAuthException", "code": 2200 } }

我还在我的路由中定义了两次相同的回调 URL 来处理 GET 和 POST 请求。我上面提到的 API 请求正在触发我的回调 url 但我在服务器日志中也遇到错误

在 2015 年 2 月 12 日开始为 66.220.158.118 获取“/auth/facebook/callback/?hub.mode=subscribe&hub.challenge=246450618&hub.verify_token=thisisaverifystring”19:24:12 +0530 我,[2015-02-12T19:24:12.530395 #18960] 信息——omniauth:(facebook)回调阶段启动。 E,[2015-02-12T19:24:12.530916 #18960] 错误——omniauth:(facebook)身份验证失败! no_authorization_code:OmniAuth::Strategies::Facebook::NoAuthorizationCodeError,必须传递 code(通过 URL 或 fbsr_XXX 签名请求 cookie)

OmniAuth::Strategies::Facebook::NoAuthorizationCodeError(必须传递 code(通过 URL 或 fbsr_XXX 签名请求 cookie): omn​​iauth-facebook (2.0.0) lib/omniauth/strategies/facebook.rb:151:in with_authorization_code!' omniauth-facebook (2.0.0) lib/omniauth/strategies/facebook.rb:71:incallback_phase' omn​​iauth (1.2.2) lib/omniauth/strategy.rb:227:in callback_call' omniauth (1.2.2) lib/omniauth/strategy.rb:184:incall!' omn​​iauth (1.2.2) lib/omniauth/strategy.rb:164:in call' omniauth (1.2.2) lib/omniauth/strategy.rb:186:incall!' omn​​iauth (1.2.2) lib/omniauth/strategy.rb:164:in call' omniauth (1.2.2) lib/omniauth/builder.rb:59:incall' 机架 (1.5.2) lib/rack/etag.rb:23:in call' rack (1.5.2) lib/rack/conditionalget.rb:25:incall' 机架 (1.5.2) lib/rack/head.rb:11:in call' remotipart (1.2.1) lib/remotipart/middleware.rb:27:incall' 动作包 (4.1.8) lib/action_dispatch/middleware/params_parser.rb:27:in call' actionpack (4.1.8) lib/action_dispatch/middleware/flash.rb:254:incall' 机架 (1.5.2) lib/rack/session/abstract/id.rb:225:in context' rack (1.5.2) lib/rack/session/abstract/id.rb:220:incall' actionpack (4.1.8) lib/action_dispatch/middleware/cookies.rb:560:in call' actionpack (4.1.8) lib/action_dispatch/middleware/callbacks.rb:29:in调用中的块' activesupport (4.1.8) lib/active_support/callbacks.rb:82:in run_callbacks' actionpack (4.1.8) lib/action_dispatch/middleware/callbacks.rb:27:incall' 动作包 (4.1.8) lib/action_dispatch/middleware/reloader.rb:73:in call' actionpack (4.1.8) lib/action_dispatch/middleware/remote_ip.rb:76:incall' 动作包 (4.1.8) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call' actionpack (4.1.8) lib/action_dispatch/middleware/show_exceptions.rb:30:incall' railties (4.1.8) lib/rails/rack/logger.rb:38:in call_app' railties (4.1.8) lib/rails/rack/logger.rb:20:in调用中的阻塞' activesupport (4.1.8) lib/active_support/tagged_logging.rb:68:in block in tagged' activesupport (4.1.8) lib/active_support/tagged_logging.rb:26:in 已标记' activesupport (4.1.8) lib/active_support/tagged_logging.rb:68:in tagged' railties (4.1.8) lib/rails/rack/logger.rb:20:incall' 动作包 (4.1.8) lib/action_dispatch/middleware/request_id.rb:21:in call' rack (1.5.2) lib/rack/methodoverride.rb:21:incall' 机架 (1.5.2) lib/rack/runtime.rb:17:in call' activesupport (4.1.8) lib/active_support/cache/strategy/local_cache_middleware.rb:26:incall' 机架 (1.5.2) lib/rack/lock.rb:17:in call' actionpack (4.1.8) lib/action_dispatch/middleware/static.rb:84:incall' 机架 (1.5.2) lib/rack/sendfile.rb:112:in call' railties (4.1.8) lib/rails/engine.rb:514:incall' railties (4.1.8) lib/rails/application.rb:144:in call' rack (1.5.2) lib/rack/lock.rb:17:incall' 机架 (1.5.2) lib/rack/content_length.rb:14:in call' rack (1.5.2) lib/rack/handler/webrick.rb:60:inservice' /home/sshinde/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/webrick/httpserver.rb:138:in service' /home/sshinde/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/webrick/httpserver.rb:94:in运行' /home/sshinde/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/webrick/server.rb:295:在start_thread'

中的`块中

我假设验证令牌有问题,但我不确定如何获得此令牌。

请评论

您的回调 url 似乎没有实现,您需要实际创建它。您正在使用来自 OmniAuth 的登录 url,这显然是在请求与您的订阅回调无关的代码或签名请求。

理想情况下,这些 url 应该有所不同,我看不到使用订阅回调 url.

超载您的登录 url 端点有任何直接好处

在您的登录 url 代码中,您

  • 验证 hub.verify_token 是否与您在创建订阅时提供的匹配?
  • 呈现对仅包含 hub.challenge 值的 GET 请求的响应?