2017-03-20 2 views
0

匿名のサインインまたはログされたアカウントを使用してデータを格納するAndroidアプリケーションがあります。Firebaseデータベースをリンクする際のデータベースの規則

問題は、匿名ユーザーとして作成されたデータをログに記録されたアカウントに変換する場合です。私は匿名と成功のアカウントに署名した両方のリンクが、私はそれが原因でアクセスルールであると思われるが、私はそれが両方のアカウントを受け入れる必要があることをFirebaseを伝えるために、それらを指定する方法が分からない

SyncTree: Listen at /currentSession/xxx-AnonymousLoginUserId-xx failed: DatabaseError: This client does not have permission to perform this operation 

を取得しています。私は|| auth.provider='anonymous'が間違っていることを確信しているが、私は診断であ​​なたを助けるために共有しています問題について考えていたときに

ルールは今

{ 
    "rules": { 
    "currentSession": { 
     "$uid": { 
     ".write": "$uid === auth.uid || auth.provider === 'anonymous'", 
     ".read": "$uid === auth.uid || auth.provider === 'anonymous'" 
     } 
    ... 
}, 

のように見えます。ところで

:auth.provider =「匿名」が構文エラーはおそらくではありません。すべてはルールが

{ 
    "rules": { 
     "currentSession": { 
     "$uid": { 
      ".write": true, 
      ".read": true 
      } 
     ... 
}, 

ですが、私は

EDIT 1弱いのでルールに満足していない場合に適しています原因(私はそれをコピーしなかった、私はちょうど私の記憶からそれをタイプした)。

EDIT 2:ご注意くださいcurrentSession : { "$uid" : { ...おそらく問題はauth.uidが1つの変数であることに気づきましたが、リンクされたアカウントの場合はおそらくuidのセットになるはずです。何か案が?

+0

編集に関しては、アカウントをどのようにリンクしているのか、この特定のケースで何をしているのかについて、より詳細な情報を提供する必要があります。 –

答えて

2

私はここで構文エラーがあなたのルールのanonymous部分があるべきであるということであると思う:

auth.provider == 'anonymous' 

ダブル=はなく、1つ1(割り当て)よりも比較することexamples hereに見ることができるように。

しかしそれ以上に、匿名ビットが必要かどうかは完全にはわかりません。

フローが匿名ユーザーとして開始し、linkWithCredential機能を使用せずに新しいサインインアカウントに変換している場合、Uidは同じままです。その場合、アカウントが現在匿名であるかどうかは関係ありませんので、uidが一致するかどうかを確認するだけで十分です。

+0

さて、私はダブルチェックします。ありがとう。 –

+0

私のオリジナルの質問を更新しました。問題はおそらくデータ構造であり、 'auth.uid'にはただ1つの値しかありませんが、匿名とログインしたアカウントをリンクすると2つのuidが含まれていると思います。 –

+0

匿名を開始し、後ですでに割り当てられたuidを持つ既存のアカウントに切り替えると、Uidを同じにすることはできません。 –

関連する問題