1

JavaScript フロントエンドと Rails REST API バックエンドを構築しています。ユーザーは Facebook を使用してのみログインできます。このようなものに最適なアーキテクチャは何ですか? 私はRailsとRESTの初心者ですが、これまでのところ私が考えていることは次のとおりです。

  1. FB JavaScript ライブラリを使用してクライアントにログインします。
  2. /users/current にリクエストを送信します。リクエストに FB トークンを含めます。(この URL は安静ですか?)
  3. サーバー上
    • トークンが有効な場合は、ユーザー情報を取得し、JSON (id、pic、name など) を送信します。
    • トークンが無効な場合は、エラーを送信します

誰かが私を正しい方向に向けてもらえますか? ありがとう!

4

2 に答える 2

1

そうです、私は実際に同じコンセプトを使用してアプリケーションを開発していますが、Google ログインを使用しています。

探しているのは、フェデレーテッド ログインを組み込む予定の場合は、Facebook または OpenID 用の OAuth 2.0 です。

ええ、基本的にあなたの言っていることは正しいです。クライアントから認証トークンを取得し、そのトークンを使用して Facebook にユーザー情報の GET 要求を送信することにより、トークンの有効性を確認する認証方法が必要なサーバーに要求を送信します。応答を取得したら、GET 要求から取得したデータに応じて、JSON またはエラーで情報を返す必要があります。

フェイスブック OAuth 2.0

それはあなたを正しい方向に向けるはずです。うまくいけば、これが役に立ちます。

于 2012-04-12T15:00:13.733 に答える
1

@Leo は、アプローチの 1 つの方向性を示しています。

別の方法は、Devise を使用することです。

  1. Devise をトークン認証可能に設定します。
    手順はこちら: http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/

  2. config.skip_session_storage = [:token_auth]セッションが保存されず、毎回トークン ID を送信する必要があるように、initializers/devise.rb に設定します。

  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. 上記の手順を設定すると、devise からトークンが返されます。これを使用して API と通信できます

于 2012-08-26T04:26:59.120 に答える