使用Facebook的Access_token进行Rails身份验证

时间:2012-06-17 20:21:50

标签: ruby-on-rails ios devise

我目前正在使用rails后端构建iPhone应用程序。我在iphone上使用facebook的单点登录(SSO),并且在客户端上的身份验证效果非常好。我在rails上使用devise作为后端。

注意我已经咨询了Design for Facebook authentication in an iOS app that also accesses a secured web service

我看到devise有一个名为token_authenticable的东西,它本质上是该线程的第5步中描述的“ticket”。这是我看到的当前流程

  1. 用户在手机上登录facebook SSO
  2. 用{access_token:X}打电话给myserver.com/sessions/fb_sso
  3. 在服务器端(在SessionsController#fb_sso,我将使用access_token对facebook进行API调用
  4. 如果access_token有效,请检查db中是否存在用户。如果用户不存在,请创建新用户
  5. 现在我们可以将{user_id:X,devise_auth_token:Y}返回给1)
  6. 这很简单。但是,我有几个问题:

    1. 使用devise_auth_token,这是否意味着我不再需要从设计中调用sign_in(“user”,resource)? (见http://jessewolgamott.com/blog/2012/01/19/the-one-with-a-json-api-login-using-devise/
    2. 将代码放在3-4的最佳位置在哪里?
    3. 我似乎无法在Google上找到关于此主题的内容。为什么有一个如此常见的过程那么少的教程?我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:1)

为什么不能使用omniauth-facebook gem。它是一个非常简单的解决方案来获取访问令牌,如果你使用设计它的潜力将加倍。确保您需要在不同的登录时间获得不同的访问令牌。

您可以浏览此链接 https://github.com/pramodv-nyros/social-login-in-rails

答案 1 :(得分:0)

您必须在服务器和ios客户端上使用相同的令牌。一个简单的解决方案是通过设备+ omniauth将所有逻辑放在服务器端,iOS仅处理来自服务器端的UI和响应。 如果你想从iOS获取令牌,比如使用facebook iOS SDK,你应该将令牌告诉服务器端,但看起来不安全。