1

我正在构建一个 javascript 前端和一个 Rails REST API 后端。用户只能使用 Facebook 登录。像这样的东西最好的架构是什么?我是 Rails 和 REST 新手,但到目前为止我的想法是:

  1. 使用 FB javascript 库登录客户端
  2. 向 /users/current 发送请求。在请求中包含 FB 令牌。(这个网址安静吗?)
  3. 在服务器上
    • 如果令牌有效,则获取用户信息并将 JSON 传回(id、pic、name 等)
    • 如果令牌无效,则回传错误

有人可以指出我正确的方向吗?谢谢!

4

2 回答 2

1

没错,我实际上正在使用相同的概念开发一个应用程序,但通过 Google 登录。

如果您计划合并联合登录,您正在寻找的是用于 Facebook 或 OpenID 的 OAuth 2.0。

所以,是的,基本上你说的都是对的。您从客户端获取授权令牌,向服务器发送请求,您应该有一个身份验证方法,该方法通过使用该令牌向 facebook 发送用户信息的 GET 请求来检查令牌的有效性。收到响应后,您应该返回 JSON 格式的信息或返回错误,具体取决于您从 GET 请求返回的数据。

脸书 OAuth 2.0

那应该为您指明正确的方向。希望这会有所帮助。

于 2012-04-12T15:00:13.733 回答
1

@Leo 为您提供了一种方法。

另一种方法是使用设计。

  1. 将设计配置为可令牌验证。
    这里的步骤:http: //matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/

  2. 在 initializers/devise.rb 中设置config.skip_session_storage = [:token_auth],以便不存储会话,并且每次都必须发送令牌 ID

  3. 定义如下函数。此函数验证您发送的 FB 访问令牌是否正确以及它是否对应于 FB id。我们必须在调用 valid_password 的地方使用这个函数,因为我们的数据库中没有用户创建的密码。但我们必须通过 Facebook 对其进行验证。

    def self.valid_password_custom?(password, fbid)
      uri = URI.parse("https://graph.facebook.com/me")
      fb_params = {"access_token"=>password}
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true
      request = Net::HTTP::Get.new(uri.path)
      request.set_form_data( fb_params )
      request = Net::HTTP::Get.new( uri.path + "?" + request.body )
      response = http.request(request)
      json_response = JSON.parse(response.body)
    
      if json_response["id"] == fbid
        logger.debug("FB Access token is valid for the user")
        return true
      else
        logger.debug("FB Access token is not valid for the user. ID for access token is '#{fbid}'")
        return false
      end
    end
    
  4. 一旦设置了上述步骤,您将从设计中获得一个令牌。您可以使用它与 API 进行通信

于 2012-08-26T04:26:59.120 回答