2016-08-10 20 views
5

私はAndroidアプリケーションにFirebase Authを完全に統合しました。今では、クライアントが独自のトークンを使用してバックエンド(レール)とやりとりしたいと思っています。私の質問はどのように行うのこのです:Firebase Auth with Rails?

  1. ユーザーがログインしている、例えば、Facebookの認証のために使用して、
  2. のためのユニークなトークンを使用してクライアントに応答する
  3. それをバックエンドと確認するためにFirebaseトークンを送ります今後のAPI要求(...、ユーザーデータを取得し、ユーザデータを保存)

はあなたに

答えて

1

ありがとうあなたがステップ#3を必要としません。 Firebase Auth Android SDK getToken() APIは、ログインユーザの短期間(1時間)のFirebase認証IDトークンを返し、前のトークンが期限切れになった場合に自動的に新しいトークンを返します。

Firebase token verification docには、クライアントアプリケーションでFirebaseトークンを取得し、サーバー側でトークンを確認する方法が記載されています。あなたがあなたのアンドロイドコード内でトークンを得れば、あなたのバックエンドに送信し、前方JinLiuの答えを撮影

+0

それは単にすることができ –

0

は言う:https://www.yourbackend.com?authenticate?token=asdad7687h ... Firebaseによって生成されたトークンは、JWTのトークンであることを 注意、我々は最初にその信憑性を確認する必要がありますそれをバックエンドでデコードします。このため、これらの2つの宝石をgemfileに追加する必要があります。 gem 'jwt'、 '1.5.6' gem 'rest-client'、 '2.0.1' これを実行すると、お使いのコントローラで)機能:ユーザーが有効なトークンを持っている場合

def get_set_user 
    begin 
     token = params[:token] 
     if token.nil? 
      @user = nil 
      return 
     end 
     firebase_id = verify_user(token)[0]["user_id"] 
     if User.where(:firebase_id => firebase_id).exists? 
      @user = User.where(:firebase_id => firebase_id).first 
     else 
      @user = User.new(:firebase_id => firebase_id) 
      @user.save 
      @user 
     end 
    rescue 
     @user = nil 
    end 
end 

def verify_user(token) 
    certificate_url = "https://www.googleapis.com/robot/v1/metadata/x509/[email protected]" 
    myresponse = RestClient.get(certificate_url).body 
    certificates = JSON.parse myresponse.gsub('=>', ':') 
    myjson ="" 
    certificates.each do|key , value| 
    begin 
     x509 = OpenSSL::X509::Certificate.new(value) 
     iss = 'https://securetoken.google.com/<yourdomain>' 
     aud = 'yourdomain' # change this 
     myjson = JWT.decode(token, x509.public_key, true, 
     {    algorithm: "RS256", verify_iat: true , 
         iss: iss , verify_iss: true , 
         aud: aud , verify_aud: true 
     }) 

     return myjson 

    rescue 
    end 
    end 

    return nil  

end 

今、あなたは、見てのアクション以前のようget_set_user呼び出すことができます。 アイデアは簡単です。 https://www.googleapis.com/robot/v1/metadata/x509/[email protected]に記載されたいずれかのキーでトークンが署名されているかどうかを確認します。イエスの場合は、トークンをデコードしてファイヤーベースIDを取得します。

0

私はfirebase_id_token gemを開発しました。
すべての証明書/署名ビジネスを扱っています。上記のドキュメントは、Railsの実装を持っていません
FirebaseIdToken::Signature.verify(token)