2012-04-12 74 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通信