Ruby on Rails - 使用REST后端进行Facebook身份验证

时间:2012-04-12 14:49:40

标签: ruby-on-rails authentication rest architecture

我正在构建一个javascript前端和一个Rails REST API后端。用户只能使用Facebook登录。对于这样的事情,最好的架构是什么?我是Rails和REST新手,但到目前为止我正在思考这个问题:

  1. 使用FB javascript库登录客户端
  2. 向/ users / current发送请求。在请求中包含FB令牌。 (这个网址是否安静?)
  3. 在服务器上
    • 如果令牌有效,请获取用户信息并传回JSON(id,pic,name等)
    • 如果令牌无效,则发回错误
  4. 有人可以指出我正确的方向吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这是正确的,我实际上是使用相同的概念开发应用程序,但通过谷歌登录。

如果您打算合并联合登录,那么您要寻找的是Facebook或OpenID的OAuth 2.0。

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

Facebook OAuth 2.0

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

答案 1 :(得分:1)

@Leo给了你一个接近的方向。

另一种方法是使用Devise。

  1. 将Devise配置为Token Authenticatable 这里的步骤: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进行通信