2014-12-07 1 views
0

나는 사용자 정보를 저장하기 위해 파이어베이스를 사용하는 앱을 디자인하고 있습니다. 아래, 데이터베이스를 쿼리하고, 저장된 암호를 가져 와서 입력 된 암호와 대조하여 일치 여부에 따라 부울 값을 반환하는 메서드를 작성하려고합니다.비동기 Firebase 쿼리를 동 기적으로 실행하도록 하시겠습니까?

-(BOOL) ValidateUser: (NSString*)username :(NSString*)password { 


//initialize blockmutable true-false flag 
__block bool loginFlag = true; 

//initialize blockmutable password holder 
__block NSString* passholder; 

//check if user exists in database 
//get ref to firebase 
Firebase * ref = [[Firebase alloc] initWithUrl:kFirebaseURL]; 

//delve into users 
Firebase * usersref = [ref childByAppendingPath:@"users"]; 

//search based on username 
FQuery * queryRef = [[usersref queryOrderedByKey] queryEqualToValue: username]; 

//EXECUTION SKIPS THIS PORTION OF CODE 
//get snapshot of things found 
[queryRef observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *querySnapshot){ 
    NSLog(@"%@", querySnapshot); 

    if no match found 
    if (querySnapshot.childrenCount == 0) 
    { 
     return false 
     loginFlag = false; 
    } 

    //otherwise store password of thing found 
    else 
    { 
     passholder = querySnapshot.value[@"hashed_password"]; 
     NSLog(@"%@", passholder); 
    } 

}]; 

//CODE SKIPS TO HERE 

NSLog(@"%@", passholder); 

//check inputted password against database password 
if (![password isEqualToString:passholder]) 
{ 
    //if they don't match, return false 
    loginFlag = false; 
} 

return loginFlag; 
} 

그러나이 문제는 firebase 쿼리가 실행되기 전에 종료되고 true를 반환한다는 점에서 문제가 있습니다. 본질적으로 메서드는 실행되고 입력 된 암호에 대해 자리 표시 자 값을 확인하고 bool 값을 반환하며 AND ONLY THEN은 (블록 내에서) 암호를 검색합니다. 블록을 동 기적으로 실행하여 올바른 부울을 실제로 반환하도록하는 방법을 모르겠습니다.

실제로 올바른 부울 값을 반환하도록 메소드의 흐름을 변경하는 방법이 있습니까? 나는 잃어 버렸다.

너무 감사

PS : 내가 중포 기지 전용 로그인 functionailty를 지원하는지 알고 (AUTHUSER 및 모든) 해요; 그러나이 프로젝트는 개념 증명 일 뿐이므로 우리는 기본 firebase에 저장된 단순하고 암호화되지 않은 암호를 사용하고 있습니다.

답변