2016-09-05 2 views
0

가짜 사용자가 Firebase DB에 추가되었고 테스트 목적으로 DB에서 사용자를 확인할 수 있는지 확인하려고합니다.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

내가 FIRDatabase.setLoggingEnabled(true)viewDidLoad 안에 설정하면 쿼리가 생성 될 때 발생하는 모든 이벤트를 기록하는 데 도움이됩니다. 끝 부분에서 데이터베이스가 다음 JSON을 반환했습니다.

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

음 ... 맞아.

시뮬레이터에서 실행 중이십니까?

그렇다면 시뮬레이터에서 Firebase Apps를 실행하지 마십시오. 내가 모의 실험을 할 때, Firebase 쿼리는 20-30 %의 시간 동안 작동하지 않습니다. 전화 한 번도 문제가 없었어. 필자는 Firebase를 사용하여 많은 프로젝트를 수행했으며 시뮬레이터를 사용할 때마다 데이터베이스가 적어도 하루에 한 번씩 작업을 중단합니다.

희망이 있습니다.

는 개인적으로 사용 : 이미 나열했습니다

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

.

+0

시뮬레이터를 사용하고 있지 않습니다. 전 시간에 전화로 실행 해왔다. – eshirima

관련 문제