2012-04-12 107 views
1

我正在构建一个JavaScript前端和一个Rails REST API后端。用户只能使用Facebook登录。什么是这样的最好的体系结构?我是一个Rails和REST新手,但在这里就是我至今想:使用FB javascript库 Ruby on Rails - 使用REST后端的Facebook身份验证

  • 发送到/用户/当前请求的客户端上

    1. 登录。将FB令牌包含在请求中。 (这是URL宁静?)
    2. 在服务器
      • 如果令牌是有效的,获取用户信息,并且如果令牌无效发送回JSON(ID,PIC,姓名等)
      • ,传回错误

    可能有人请点我在正确的方向?谢谢!

  • 回答

    1

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

    你所寻找的是OAuth 2.0用户对Facebook或OpenID的,如果你计划纳入联合登录。

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

    Facebook OAuth 2.0

    这应该指向你在正确的方向。希望这有助于。

    1

    @Leo给你的方法的一个方向。

    另一种方法是使用设计。

    1. 配置设计为Token Authenticatable。
      这里的步骤:http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/

    2. config.skip_session_storage = [:token_auth]在初始化/ devise.rb使会话不存储,你必须每次

    3. 如下发送令牌ID定义一个函数。该函数验证您发送的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. 一旦设置了上述步骤,您将从devise获得一个令牌。您可以使用它来与API通信