用于 Rails 和 iOS 身份验证的全身份验证



我有一个处理iOS客户端api的rails应用程序。我使用devise,omniauth-facebook作为rails。对于iOS客户端,我正在使用帐户和社交框架进行Facebook身份验证。我已经抓住了 oauth 令牌并通过全身份验证回调将其传递给 rails 进行身份验证,但我收到此错误。有人可以指导我做错了什么吗?下面是我得到的日志。

Started POST "/users/auth/facebook/callback" for ::1 at 2015-01-12 10:59:22 +0800 I, [2015-01-12T10:59:22.928323 #99294] INFO -- omniauth: (facebook) Callback phase initiated. E, [2015-01-12T10:59:22.929737 #99294] ERROR -- omniauth: (facebook) Authentication failure! no_authorization_code: OmniAuth::Strategies::Facebook::NoAuthorizationCodeError, must pass either a code (via URL or by an fbsr_XXX signed request cookie) Processing by Users::OmniauthCallbacksController#failure as / Parameters: {"access_token"=>"tokenFromACFBiOS"} Redirected to localhost:3000/users/sign_in Completed 302 Found in 4ms (ActiveRecord: 0.0ms)

这是我的iOS和后端代码的要点。 https://gist.github.com/chocnut/ae6f415accd95c8ef415

我能够使用omniauth-facebook-access-token Gem来实现这一点。https://github.com/SoapSeller/omniauth-facebook-access-token

在您的设计初始化程序中创建另一个名为"facebook_access_token"的oauth提供程序,它可以使用与Facebook提供程序相同的凭据。

将令牌发布为参数"access_token"。如果希望应用的最终响应以 JSON 形式返回,请在回调 URL 上使用查询字符串 ?format=json。

当您创建 facebook(fb) 应用程序时,您应该指出 url 回调的位置,可能您在 fb 中将其设置为: http://localhost:3000/bla/bla 如果您在自己的机器上进行测试,它可以正常工作,但为了能够在您的 ios 设备中进行测试,那么您应该更改机器 ip 之类的localhost(例如 192.168.1.1)

最新更新