2017-06-08 7 views
-1

displayNameが一意であることを確認する前に確認しておきたいと思います。私はこのようなユーザ・テーブルがあります。ユーザーの表示名/ユーザー名が一意であるかどうかFirebaseで確認してください

$uid: { 
    ..data.. 
    displayName: 'noob839', 
} 

私はこれを最適化するために".indexOn": ["displayName"]を行っている、今私が(クライアントから)displayName値がすでに使用されているかどうかを確認するために、すべてのユーザーを確認する必要があります。

現在のユーザーは、別のユーザーのそのフィールドのみを読むことができます。

これは推奨されるアプローチですか?表示名が一意であるかどうかを確認するために、どのように各ユーザーを反復するのですか?前もって感謝します。

P.S.ユーザーにデータを添付することはできないため、サインアップやデータ検索(2段階のプロセス)に別の障害点が追加されるため、アプリケーションデザインを複雑にする別個のユーザーオブジェクトを作成する必要があります。残念です!その名前の

+1

コレクションで一意にしたい値をキーとして保持することをお勧めします。したがって、 'displayNames'のコレクションを作成し、そこにキーとして(潜在的にエンコードされた)表示名を使用してください。 https://stackoverflow.com/questions/35243492/firebase-android-make-username-uniqueを参照してください。 –

答えて

1

クエリあなたがユーザーをループされないように:

これはAngular2であるが、そこならば(私はすでに持っていたもの)適切な言語

/* 
    Available username 
*/ 
public availUsername(displayName: string): Observable<any[]> { 
    this.users = this.AF.database.list("users", { 
     query: { 
      orderByChild: 'displayName', 
      equalTo: displayName 
     } 
    }).first(); 
    return this.users; 
} 

this.availUsername("theblindprophet"). 
    subscribe(response => { 
     if(response.length == 0) { 
      // No one has this displayName 
     } else { 
      // someone has it 
     } 
    }); 

を変換することができます結果が得られない(配列の長さが0)場合、誰もその名前を持ちません。

usersに保存されているユーザーがいるとします。

関連する問題