2017-07-03 3 views
2

documentationによると、電話認証以外のすべてのプロバイダの値が表示されます。ユーザーがPhone AuthenticationとFacebookの両方で認証されているかどうかをデータベースで確認したいauth.provider === 'facebook'というルールを書きますが、auth.provider === 'phone'というルールはありません。論理的には、もし最初のものがうまくいけば、2番目のものはうまくいかないでしょうが、私はいつも電話資格でサインインし、初めてFacebookの資格情報を電話の資格情報とリンクしたと言いますか?一言で言えば、ファイアベースデータベースの電話認証とFacebook用のauth.providerの値

  1. 電話認証の値はauth.providerですか?はいの場合、それは何ですか?
  2. ユーザーがデータベースにプロバイダとしてFacebookとPhoneの両方を持っているかどうかを確認する方法はありますか?ユーザーがどちらかでサインインしても気にしません。私が欲しいのは、ユーザーが自分のFacebookの資格情報を電話にリンクしておく必要があることだけです。
  3. auth.providerはサインインに使用したプロバイダの値しか与えないと仮定すると、Facebookでユーザーにサインインして電話資格情報としかリンクしていないとき、auth.provider === 'facebook'はなぜ動作しますか?

更新:いくつかの試行錯誤で

  1. は、電話認証が使用される唯一の方法である場合、auth.providerが実際anonymousないphoneようです。
  2. また、bojeil'sの回答によれば、auth.token.firebase.identities["phone"] !=nulltrueであることが判明した。注目すべき点は、ではなく、documentationに記載されているであることです。ドキュメントからの引用:

firebase.identities:このユーザーのアカウントに関連付けられているすべてのアイデンティティの辞書。辞書のキーは、次のいずれかになります。メールgoogle.comfacebook.comgithub.comtwitter.com

もここには記載されていません。ページが更新された最後の日は5月17日、2017でした。その電話帳認証のサポートを含むJavascript用Firebase SDK(v4.0.0)がその日にリリースされたことを考えると、ドキュメント内の厄介さのレベルを想像するだけです(release notes参照)。

+1

ちょっとMayankは 'auth.provider'の代わりに' auth.token.firebase.sign_in_provider === 'phone' 'を使ってみてください。 'auth.provider'が実装されていないことを報告し、トークンデータが最新でないことに関するドキュメントを報告します。 – bojeil

+0

'auth.token.firebase.sign_in_provider === 'phone''が動作します。また、 'auth.provider === 'anonymous''が動作します。バグと思われます。 –

+0

私はこれに関するバグレポートを提出しました。 auth.providerの使用=== 'anonymous'は間違っています。実際の匿名ユーザーは、その小切手を渡します。後者が修正されるまで、以前の小切手を使用する必要があります。 – bojeil

答えて

0
文書化されていない機能の一部を利用することにより

(理由について質問を読んで)、1は、タスクを達成するために、以下のルールを記述することができます

$uid === auth.uid && auth.token.firebase.identities['phone']!=null && auth.token.firebase.identities['facebook.com']!=null

更新:このソリューションは、更新されたドキュメントに従って完全に機能します。

1

データベース/ストレージルールの場合、auth.providerは、ユーザーの認証とトークンの生成に使用されるプロバイダーのみを表示します(リンクに使用されているトークンではありません)。これはphoneまたはfacebookのいずれかになります。それは両方になることはできません。一度に1つだけ認証します。 Firebaseはマルチファクタ認証をサポートしていません。ユーザーを確認したい場合は、両方のプロバイダがリンクしている、と述べた

、行うための正しい方法をチェックすることです: https://firebase.google.com/docs/reference/security/database/#authtoken を具体的には、auth.token.firebase.identities 次が存在するかどうかをチェックすることができます: auth.token.firebase.identities["facebook.com"] auth.token.firebase.identities["phone"]

関連する問題