2017-10-24 11 views
1

私は2つのアプリを持つfirebaseプロジェクトを持っています。クライアントアプリとサービスプロバイダアプリ。両方ともfirebase phone認証を使用します。 すべてのユーザは、同じ電話番号のクライアントまたはサービスプロバイダとして登録できます。 サーバー側では、送信されたトークン(各アプリケーションごとに異なる)からユーザーID(両方のアプリケーションで同じ)を取得できます。私が取り出す方法が分からないことは、トークンがアプリケーションに属するユーザーに属しているかどうかです。 たとえば、ログインしたユーザーのプロファイル情報を取得するためにサーバーに要求を送信すると、サーバーにトークンが送信されます。クライアントアプリケーションまたはサービスプロバイダーアプリケーションのユーザープロファイル情報を返す必要があるかどうかを確認するにはどうすればいいですか。 2つの非常に異なるプロファイルモデルです。 https://firebase.google.com/docs/auth/admin/custom-claimsプロジェクト内に複数のアプリを持つFirebase認証

あなたはFirebase管理SDKを使用してカスタムの請求を設定します::

admin.auth().setCustomUserClaims(uid, {role: 'client'|'provider'}) 

あなたは、アクセスを強制するでしょう

+0

両方のアプリケーションに別々のルート要素を割り当てることができます。各アプリケーションで 'approot/uid'要素を参照してください。ここで、' approot'はユーザーがデータベースにアクセスするアプリケーションです。あなたのプロファイルモデルは両方のアプリケーションで異なるので、これは問題ではありません。 –

+0

@MayankVerma私は同じことをしました。 '/ client/profile/id'と'/provider/profile/id'は各アプリケーションのプロファイルを取得するルートです。私はおそらくトークンが生成されているアプリケーションを取得する方法があると思った – Hadu

+0

だから、あなたが望むものを達成すれば?どんな違いがあるの?私の意見では、あなたはまだ別のアプリケーションのための別々の要素を維持する必要があります。 –

答えて

1

あなたは、クライアントアプリケーションまたはサービスプロバイダのアプリからユーザーを区別するために主張したカスタム・ユーザーを使用することができますあなたのルール https://firebase.google.com/docs/auth/admin/custom-claims#propagate_custom_claims_to_the_client

あなたは、クライアント側のトークンをリフレッシュ強制する必要があります。たとえば、次のよう

{ 
    "rules": { 
    "providerContent": { 
     ".read": "auth.token.role === 'provider'", 
     ".write": "auth.token.role === 'provider'", 
    }, 
    "clientContent": { 
     ".read": "auth.token.role === 'client'", 
     ".write": "auth.token.role === 'client'", 
    } 
    } 
} 

は、あなたの主張を伝播することができます。

+0

私はそれを試してみましょう – Hadu

+0

これはiOSデバイスのようですが、私はadmin SDKにアクセスできない。 trueの場合、クライアント側から認証されたユーザーのカスタムロールを設定できません。サーバー側から確認することはできません。任意のヒント? – Hadu

+2

Admin SDKはバックエンドサーバーからのみアクセスできます。クライアント側のデバイスからは使用しないでください。管理SDKを使用してサーバーに役割を設定する前に、サーバーに何らかの証明書を要求する必要があります。たとえば、プロバイダアプリからサインインした後、IDトークンとプロバイダアプリケーションからのリクエストであることを示すいくつかのフラグ(「プロバイダ」など)を送信し、IDトークンを確認してその役割をそのユーザーに設定します関連する「uid」。これはそれを行うための素朴な方法です。 – bojeil

関連する問題