2012-04-12 10 views
1

私はjavascriptフロントエンドとRails REST APIバックエンドを構築しています。ユーザーはFacebookを使用してのみログインできます。このようなものに最適なアーキテクチャは何ですか?私はRailsとREST初心者ですが、ここで私がこれまで考えてんだよ:クライアント上Ruby on Rails - RESTバックエンドによるFacebook認証

  1. ログインが
  2. は/ユーザー/現在に要求を送信するJavaScriptライブラリFBを使用しました。 FBトークンをリクエストに含めます。 (このURLは安らかですか?)サーバー
    • トークンが有効である場合には、ユーザー情報を取得し、トークンが無効である場合、バックJSON(ID、PIC、名前、など)
    • を送信し、

バックエラーを送信誰かが正しい方向に私を指すしてくださいもらえますか?ありがとう!

答えて

1

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

フェデレーションログインを組み込む予定の場合は、Facebook用のOAuth 2.0またはOpenIDをお探しください。

だから、あなたが言ったことは正しかったです。クライアントから認可トークンを取得し、サーバーにトークンの有効性をチェックする認証方法が必要なサーバーに要求を送信し、ユーザー情報のGET要求をそのトークンでFacebookに送信します。レスポンスを受け取ったら、JSONの情報を返すか、GETリクエストから取得したデータに応じてエラーを返す必要があります。正しい方向にあなたを指している必要があり

Facebook OAuth 2.0

。うまくいけば、これは役に立ちます。

1

@Leoはあなたにアプローチの方向性を1つ与えました。

もう1つの方法は、Deviseを使用することです。

  1. トークン認証可能に構成します。ここ
    ステップ: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と通信できます

関連する問題