0

Angularjs 사용. Firebase auth 이벤트가 발생하고 현재 사용자를 설정할 기회가 있기 전에 사람이 페이지를 다시로드하고 컨트롤러가 현재 사용자의 uid를 사용하여 Firebase를 쿼리하려고하는 상황을 어떻게 처리합니까?Firebase에서 페이지의 비동기 인증을 처리하여 사용자의 uid가 필요한 목록을 얻습니다.

자세한 정보 : 중포 기지 쿼리가 필요 는 사용자의 UID이다와 $ state.go ('/ 목록')

하지만 통해 경로를 탐색 할 때 모든 일하는 사람이 사용자의 페이지를 컨트롤러 검사를 다시로드 할 때 이는이 이벤트 핸들러 화재 때까지 존재하지 않습니다 중포 기지는 여전히 동기 인증 호출이 있다면 제가 확인을하고 컨트롤러의 시작 부분에 호출 할 수 있기 때문에

auth.onAuthStateChanged(function(user) { 
    if (user) { 
     //Set user 
     UserSrvc.currentUser = user; 
    } else { 
     $state.go('/login'); 
    } 
}); 



app.controller('ListCtrl', function($scope, UserSrvc, Posts) { 

    if (!UserSrvc.currentUser){ 
     UserSrvc.getUser(); 
    }; 

    $scope.posts = Posts.list(); <--THIS GENERATES ERROR, SINCE NO USER YET 
}) 

이 문제가되지 않을 것입니다. 그래서

:

이 상황을 처리하는 가장 좋은 방법은 무엇
  1. .
  2. 사용자가 로그인하지 않은 경우 Posts.list()를 실행하지 않고 UserSrvc.getUser()가 $ state.go ('/ login')로 이동하는 방법은 무엇입니까?

답변

0

이를 구현하는 가장 일반적인 방법은 onAuthStateChanged()로 게시물의 로딩을 이동하는 것입니다 :

app.controller('ListCtrl', function($scope, UserSrvc, Posts) {   
    auth.onAuthStateChanged(function(user) { $timeout(function() { 
    if (user) { 
     UserSrvc.currentUser = user; 
     if (!UserSrvc.currentUser){ 
     UserSrvc.getUser(); 
     }; 

     $scope.posts = Posts.list(); 

    } else { 
     $state.go('/login'); 
    } 
    })}); 
}); 

당신은 다른 각도가 인식되지 않을 것이기 때문에 나는 거기에 $timeout()을 추가 알게 될 것이다 우리가 만든 업데이트는 $scope입니다.

Google은 자동으로이 작업을 많이 수행하는 library binding Firebase to AngularJS called AngularFire 전용을 보유하고 있습니다.

+0

감사합니다. 사용자가 이미 로그인하여이 경로를 탐색 한 경우 Posts.list()가 어떻게됩니까? auth 상태가 변경되지 않기 때문에 목록을 실행하고로드 할 것인가? – neo

+0

onAuthStateChanged는 페이지를로드 할 때 현재 상태로 시작됩니다. –

+0

오, 고마워! Btw, 당신이 언급 한 angularFire. 나는 그것을 보았고 $ getAuth() 동기 함수도 있지만 deprecated로 보인다? 그렇지 않은가요? 나는 일을하는 "웹"방식을 반영하는 새로운 문서를 찾지 못하는 것 같습니다. – neo

관련 문제