2014-01-13 11 views
5

iOSモバイルアプリケーション用のJSON APIを消費するためにrails-apiを使用する予定です。プロセス:Facebook SDK iOSのRails-api認証は接続しますか?

  1. ユーザーは
  2. ユーザーが
  3. モバイルアプリがfb_access_tokenを取得し、ことにより、ユーザーはFacebookを利用して
  4. APIサーバーのgetユーザープロファイルを識別するためのAPIサーバーに投稿コネクトFacebook上でタップするモバイルアプリを開きますfb_access_tokenを使用する
  5. APIサーバは、ユーザを作成して検索し、特定のユーザのapi_tokenを使用して応答します。
  6. モバイルアプリは以降のすべての通信にapi_token応答を使用します。

このアプリにはどの認証が最適なのですか? oAuth2またはBasicAuth?私は戸口係と一緒にレール - アピを試しましたが、ドアパネルが何らかの資産を必要とするため、ボックスからはうまくいきません。

答えて

4

これはdeviseと統合された基本認証です。

まず、モバイルアプリケーションからポストパラメータを取得します(access_tokenなど)。

url = "https://graph.facebook.com/me?access_token=" 
    begin 
     content = open(URI.encode(url + params[:user][:access_token])) 
    rescue OpenURI::HTTPError #with this I handle if the access token is not ok 
     return render :json => {:error => "not_good_access_token" } 
    end 

は今、Facebookが、これはあなたがユーザーと同じことができるよりも

を助け

status = content.status[0] 
    content = ActiveSupport::JSON.decode(content) 

    if status == "200" 
    #get the email and check if the user is already in the database. If there is not email, check by the facebook id 
    #If the user exists return the user. If the user does not exists create new 

希望応答を返す:

は、その後、私はFacebookのからユーザーの詳細情報を取得するには、オープンAPIを使用しますgoogleのコードも、 "https://www.googleapis.com/oauth2/v2/userinfo?access_token="に変更してください。

+0

ユーザーを作成したら、どのようにAPIキーを作成しますか?後で基本認証でAPIキーを使用する方法は? – Samnang

+0

私はapiキーは必要ありません。私はモバイルデバイスからアクセストークンを取得します(ユーザーには、ユーザーアクセスコードを取得するためのapiキーと秘密があります)。サーバー上で私はFacebookから取得したデータを保存し、次のaccess_token submitでユーザーがデータベースに既に存在するかどうかをチェックします。それとも別のことを意味しましたか? –

+1

私はFBにアクセスするためのクライアントIDと秘密を知っていますが、モバイルからaccess_tokenを取得してサーバーに送信した後は、次に、サーバーをチェックしてユーザーを作成するか、既存のものを使用します。何をモバイルに返信しましたか?ユーザーがログインした後、モバイルとサーバーの間のすべての通信のために、モバイルでFacebookから取得したaccess_tokenを使用していますか、独自のキー/コードを使用してユーザーを識別していますか? – Samnang

2

OAuth2を使用しているため、かなり使いやすいので、omniauth-facebookを試してみます。すべてのomniauth戦略はレールミドルウェアなので、gem 'omniauth-facebook'をgemfileに追加し、config/initializers/omniauth.rbに以下を追加すると、/auth/facebookを使用してFacebookにログインし、/auth/facebook/callbackにログインしてユーザーセッションを作成することができます。 :モバイルでのポップアップが美的ではないかもしれないとして)、キーと値を表示します。

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
      :scope => 'email,user_birthday,read_stream', :display => 'popup' 
end 

Facebookの認証トークンがあなたの携帯電話の認証に統合することができ、あなたのコールバックエンドポイントに返されるrequest.env['omniauth.auth'][:credentials][:token]になります戦略。詳細については上記のリンクとomniauth main pageを参照してください。

+1

私はomniauthを知っていますが、私はそれがWebクライアントアプリのような感じです。 APIを保護する方法の解決策を理解するために必要なもの – Samnang

+2

実際には、それはRailsミドルウェアに過ぎず、apiがデスクトップやモバイル経由で消費されているかどうかに関係なく、Rails-APIでうまく動作します。このレポをチェックしてください:https://github.com/toddlee/rails-omniauth-rest-api-server – Marc

関連する問題