2011-01-26 29 views
25

私はDeviseとOmniauthを使って自分のレールアプリのユーザー認証を設定しました。 今私は、作成したいAndroidとiPhoneアプリに対して同じ認証を使用し始めるべきなのかと思っています。Devise OmniauthとIphone/Android App

モバイル版のmy/auth/facebookを使用するか、アプリから直接リクエストを送信する必要がありますか?

これは非常に一般的な質問ですが、私はどこを見てもわかりません。

EDIT:RESTful APIで使用するためにトークン認証をアプリに追加しました。私はOmniauth/Facebookトークンの一部を見逃しています。

+0

:)ことを聞いて喜んでいるだろうトークンは、私が自分のユーザーを認証するためにそれらを比較することはできませんので、私は私のレールアプリのデータベースにあるものと同じではありませんか? – rnaud

答えて

36

申し訳ありませんが、私は自分の質問に答えています。

Facebook SDKを使用すると、SSOはデバイス上ではうまく動作しますが、受け取るトークンはRailsアプリケーションで受け取るトークンと同じではありません。明らかに、Facebookはサポートによって異なるトークンを作成します。私がしたので、何

されました:私は、Androidデバイス上のトークンを受け取ったら、私はアプリのURLを経由して、私のレールに送信:

http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN 

これは、その後、使用しています私のアプリケーションのコントローラによって捕捉されますfb_graph宝石を使ってユーザーデータを取得するトークン。トークンが有効な場合、私はいくつかの情報を受け取るつもりです。次に私のデータベースで確認し、同じUIDを見つけたらユーザーが認証され、DeviseからAuthentificable_tokenを送り返します。

、ドラフトコード:

def check_mobile_login 
     token = params[:token] 

     user = FbGraph::User.me(token) 
     user = user.fetch 

     logged = User.find_by_uid(user.identifier) 

     respond_to do |format| 
      format.html # index.html.erb 
      format.json { render :json => logged.authentication_token } 
     end 
    end 

誰もがよりよい解決策を持っている場合、私はFacebookのSDKは私のAndroidアプリに設定したが、それはそうしてい

+0

こんにちは、私は同じことをやろうとしていますし、あなたのレールアプリケーションの中でauthentication_tokenが生成されるように、あなたが "sign_in" – refaelos

+0

あなたのUserモデルのdevise宣言にtoken_authenticatableを追加すると、新しいユーザーはすべて、次のリクエストでログインするために使用できる「authentication_token」が取得されます。 – rnaud

+0

はい、トークンが期限切れになった場合、トークンを再生成するには "sign_in"する必要があります。ユーザーがcurrent_userになるためには "sign_in"する必要があります。 – refaelos

関連する問題