2016-09-05 103 views
0

我將虛擬用戶添加到我的Firebase數據庫並用於測試目的我試圖查看是否可以檢查數據庫中的用戶。Firebase數據庫 - 檢查現有用戶

我首先寫了createUserToDatabase()方法,它完美的工作。爲了存在查詢目的,我編寫了doesUserExist()方法,但多次運行後,沒有返回snapshot。該方法被調用,但實際的Firebase查詢未執行。

然後我決定做一個簡單的查詢所有的數據,因此test()。令我驚訝的是,即使我在另一個應用中使用了這種類似的查詢方法,這也不起作用,並且它工作得很好。 test()三種方法都沒有打印任何東西。

import UIKit 
import Firebase 
import FirebaseDatabase 

struct FirebaseNode 
{ 
    static let USERS: String = "Users" 
} 

class MainViewVC: UIViewController 
{ 
static var userName: String? 
var databaseRootRef: FIRDatabaseReference! 
let currentUser: User = User.sharedInstance 

@IBOutlet weak var userNameLabel: UILabel! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    databaseRootRef = FIRDatabase.database().reference() 

    if let userTitle = MainViewVC.userName 
    { 
     userNameLabel.text = userTitle 
    } 
    else 
    { 
     userNameLabel.text = "" 
    } 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
} 

@IBAction func createButtonAction(sender: UIButton) 
{ 
    test() 
} 

func doesUserExist() 
{ 
    databaseRootRef.child(FirebaseNode.USERS).queryEqualToValue(currentUser.uid).observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in 
     if snapshot.exists() 
     { 
      print("User exists") 
     } 
     else 
     { 
      print("User doesn't exist") 
     } 
    } 
} 

func test() 
{ 
    databaseRootRef.observeSingleEventOfType(FIRDataEventType.ChildAdded) { (snapshot: FIRDataSnapshot) in 
     print(snapshot) 
    } 

    databaseRootRef.observeEventType(.ChildAdded) { (snapshot: FIRDataSnapshot) in 
     print(snapshot) 
    } 

    databaseRootRef.observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in 

     print(snapshot) 
    } 
} 

func createUserToDatabase() 
{ 
    databaseRootRef.child(FirebaseNode.USERS).child(self.currentUser.uid).setValue(self.currentUser.toAnyObject()) 
} 
} 

這是我的火力地堡DB

{ 
"Users": 
{ 
    "JglJnGDXcqLq6m844pZ": ---> $uid 
    { 
     "userName":"Hello John", 
     "firstName": "Johnita", 
     "lastName":"Hernandez", 
     "email":"[email protected]", 
     "profileImage": "%uid%.jpeg", 
    } 
    } 
} 

的結構,這是我目前的一套規則

{ 
    "rules": { 
    "Users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid", 
     ".validate": "newData.hasChildren(['email', 'firstName', 'lastName', 'userName'])" 
     } 
    } 
    } 
} 

沒有錯誤被拋出任何或任何報告的權威性問題。

任何幫助將不勝感激。

回答

0

我在viewDidLoad的內部設置了FIRDatabase.setLoggingEnabled(true),這幫助記錄了查詢發生時發生的所有事件。在它結束時,數據庫返回以下JSON

[FirebaseDatabase] Got data message: { 
    b =  { 
     d = "Permission denied"; |-----> Root of ALL EVIL :) 
     s = "permission_denied"; | 
    }; 
    r = 4; 
} 
0

嗯......看起來沒錯。

你在模擬器上運行它嗎?

如果是這樣,請勿在模擬器上運行Firebase應用程序。我不知道什麼,但是當我在模擬器上時,Firebase查詢在20-30%的時間內不工作。我從來沒有遇到過電話問題。我已經使用Firebase完成了很多項目,每次在模擬器上時,數據庫都會每天至少停止一次工作。

希望有所幫助。

我個人使用:

ref.observeEventType(.ChildAdded, withBlock: { snapshot in 
     print(snapshot) 
}) 

您已經上市。

+0

我沒有使用模擬器。一直在電話上運行它 – eshirima