2017-09-24 6 views
0

私は彼のメールを受け取ってuidを取得しようとしています。 |Swift Firebaseクエリー

ユーザー

私はこれがあります。

let usersRef = Database.database().reference().child("users") 

    usersRef.queryOrdered(byChild: "email").queryStarting(atValue: email).queryEnding(atValue: email).observeSingleEvent(of: .value, with: { (snapshot) in 
     if let values = snapshot.value as? [String: Any]{ 
      print(values) 
     } 
    }) 

を、次のように私のデータベースに見えます - $ uid

| - メール: "何らかのメール"

スナップショットは何も返しません。未指定のインデックスを使用して

また、デバッガが私にこのことを伝えます。データはクライアント上でダウンロードおよびフィルタリングされます。私はそうのようにこれを行っていると思う 『電子メール』をパフォーマンス向上のためにあなたのセキュリティルールに/ユーザー

で:

{ 
    "rules": { 
"users": { 
    ".read": "auth != null", 
    "$uid": { 
    ".write": "$uid === auth.uid", 
    ".indexOn": ["email"] 
    } 

しかし、これは同様に動作しません「.indexOn」を追加することを検討してください。以下のような

+0

期待される出力は?クエリの目的は何ですか? – 3stud1ant3

+0

質問が更新されました。 – Latcie

+1

これを試してください: 'usersRef.queryOrdered(byChild:" email ")。queryEqual(toValue:email).observeSingleEvent' – 3stud1ant3

答えて

1

あなたは、クエリを実行した場所にFirebaseデータベースのインデックスを定義する必要があります。したがって、現在の所在地より1つ上のレベルです:

{ 
    "rules": { 
    "users": { 
     ".indexOn": ["email"], 
     ".read": "auth != null", 
     "$uid": { 
     ".write": "$uid === auth.uid", 
     } 
    } 
    } 
} 
0

変更:

{ 
    "rules": { 
    "users": { 
     ".read": "auth != null", 
     "$uid": { 
     ".write": "$uid === auth.uid", 
     ".indexOn": "email" 
    } 
    } 
}