2016-08-17 2 views
0

Я создаю приложения на iOS и Android с использованием Firebase auth, и мне сложно с этим справиться. Это моя функция, чтобы проверить, находится ли UID пользователя в белом списке в моей базе данных. После того, как эта функция вызывается в viewDidLoad(_:), она выйдет из инструкции охраны, а затем выйдет из функции без ввода блока завершения.Firebase для мобильных пользователей не может вернуть белый список

func checkUserAgainstDatabase(completion: (success: Bool) -> Void) { 
    guard let currentUser = FIRAuth.auth()?.currentUser else { return } 
    FirebaseController.ref.child("users").observeSingleEventOfType(.Value, withBlock: { (data) in 

// This is where the function exits and the program continues running. 

     let uid = data.childSnapshotForPath(currentUser.uid) 
     if uid.exists() { 
      completion(success: true) 
     } else { 
      completion(success: false) 
      currentUser.deleteWithCompletion(nil) 
     } 
    }) 
} 

Вот вызов в viewDidLoad(_:):

UserController.shared.checkUserAgainstDatabase { (success) -> Void in 
    if !success { 
     self.showLoginSignUpView() 
    } 
} 

Вот мои правила в базе данных:

{ 
    "rules": { 
    ".read": true, 
    ".write": true 
    } 
} 

Заранее спасибо!

ответ

0

Я провел весь день после публикации этого вопроса, пытаясь сделать решение с белым списком, и не смог заставить его работать. Однако мой друг прислал мне решение, подобное этому, и оно работает как шарм.

func checkUserAgainstDatabase(completion: (success: Bool, error: NSError?) -> Void) { 
    guard let currentUser = FIRAuth.auth()?.currentUser else { return } 
    currentUser.getTokenForcingRefresh(true) { (idToken, error) in 
     if let error = error { 
      completion(success: false, error: error) 
      print(error.localizedDescription) 
     } else { 
      completion(success: true, error: nil) 
     } 
    } 
} 
Смежные вопросы