2014-06-14 3 views
0

Firebase Simple Login을 사용하고 있으며, 적절한 로그인을 허용하고, 잘못된 로그인을 거부하며, 조용히 로그 아웃 할 수 있습니다. 내가 씨름하고있는 것은 이것이다. 내 앱이 시작될 때, 나는 사용자가 아직 로그인되어 있는지를 알아야한다 (이것은 "나를 기억한다"를 선택했을 때 일어난다). 그렇다면, 나는 바로 따라갈 것이고, 그렇지 않으면 나는 로그인 화면을 제시한다.Firebase Check Method (iOS)

전체 Firebase에서 unauth 함수를 호출하고 check 메서드를 사용하려고하면 블록에 반환 된 오류는 NULL이고 사용자 전자 메일은 마지막으로 기록 된 것과 동일합니다 - 사용자. auth 객체에서 logout 메소드를 사용하는 경우에도 마찬가지입니다.

이 프로그램은 RubyMotion 앱이므로 REPL에서이 프로그램을 사용하여 진행 상황을 볼 수 있습니다.

업데이트 : 코드에 추가 중이므로 다른 사람이 어떤 일이 벌어지는 지 확인할 수 있습니다. 그것은 운동 - firebase에 특이한 것으로 밝혀졌습니다. 나는 그 문제를 해결할 것입니다. 한편, 여기에 내 코드가 뭔지 : 최대

코드는 일을 설정 :

def init_firebase 
    @fire_ref = Firebase.new('https://my-fine-firebase.firebaseio.com') 
    @auth = FirebaseSimpleLogin.new(@fire_ref) 
end 

def login(email, password, &block) 
    status = MotionMap::Map.new({error: 'success', user: nil}) 

    @auth.login(email: email, password: password) { |error, user| 
    status.user = user 

    if error.nil? 
     if user.nil? 
     status.error = "no error but user is nil" 
     end 
     block.call(status) 
    else 
     status.error = error.localizedDescription 
     block.call(status) 
    end 

    } 
end 

그래서 내 로그인 방법은 중포 기지의 콜백 및 완료에 응답 전화, 그것은 차례로 내 루비의 폐쇄를 실행 암호. 이것은 모두 작동합니다. MotionMap 항목은 무관심한 액세스로 해시를 가져 오는 좋은 방법입니다. 이제

의 REPL에서 나는이 작업을 수행 할 수 있습니다 내가 한

(main)> error = nil 
(main)> f.unauth{|e| error = e} 
(main)> p error 
nil 

(main)> error = user = nil; 
(main)> a.check{|e, u| error = e; user = u} 
(main)> p error 
=> nil 
(main)> puts user.email 
=> 'my_real_email_address' 

그래서 첫 번째 일이 바로이 특정 중포 기지의 참조를 unauthorize했다? 그리고 나서, 나는 계속 나아 갔고 수표를 냈다. 오류는 nil (Objective-C에서는 NULL)이지만 사용자 정보는 손상되지 않았습니다. 즉, 내 사용자가 무단이라는 것을 알 수 없습니다.

업데이트 : Firebase 객체에서 unauth을 호출하면 check이 로그인 상태를 보는 방식에 영향을 미치지 않는 것으로 보입니다. motion-firebase의 logout 메소드에 대한 간단한 수정을했는데 auth 객체의 logout 메소드를 호출하면 해당 객체의 정보가 실제로 지워지고 Firebase 객체의 unauth이 호출 된 것처럼 보입니다. 이것은 무슨 일이 일어나고 있는지 보면서 내 공감입니다.

((void)checkAuthStatusWithBlock:(void (^) (NSError *error , FAUser *user))block에 매핑되는) check을 호출하면 완료되면 비동기 적으로 실행되고 nil 오류 및 완전히 비어있는 사용자로 블록이 호출된다는 점에 유의해야합니다.

nil 오류가 예상되는 동작입니까?

답변

0

좀 더 정확한 답변을 위해 문제가있는 정확한 코드를 자유롭게 게시하십시오.

Firebase는 콜백을 사용하여 사용자의 상태를 확인합니다. FireBase에 사용하는 루비 래퍼에 따라 구현이 다를 수 있습니다. Firebase는 일반적으로 성공 (사용자가 이미 인증되었거나 성공적으로 인증 된 경우), 오류 (잘못된 것) 및 기타 (사용자가 로그인하지 않은 경우)의 세 가지 옵션을 제공합니다. 이러한 각 콜백에서 수행 할 작업을 지정할 수 있습니다.

관련 문제