2014-11-26 6 views
0

저는 학교 프로젝트로 웹 사이트를 구축 중이며 Firebase와 함께 Angularjs를 사용하고 있습니다.firebase login google email

사용자 ID가 배열에 있는지 확인하려고하지만 문자열을 제대로 비교할 수없는 것 같습니다.

컨트롤러 :

'use strict'; 

var AboutController = angular.module('AboutController', []); 

AboutController.factory('Auth', ['$firebaseAuth', function($firebaseAuth) { 
    var ref = new Firebase('https://MYURL.firebaseio.com/'); 
    return $firebaseAuth(ref); 
}]); 

AboutController.controller('AboutCtrl', function ($scope, $firebase, Auth) { 

    var usrRef = new Firebase('https://MYURL.firebaseio.com/Users'); 
    $scope.users = $firebase(usrRef).$asArray(); 

    $scope.auth = Auth; 
    $scope.account = $scope.auth.$getAuth(); 
    var id = $scope.account.google.id; 
    var check = false; 
    for(var user in $scope.users){ 
    if(user.UID === id){ 
     check = true; 
     break; 
    } 
    } 
    $scope.isUser = check; 
    if($scope.isUser !== true){ 
    $scope.users.$add({ 
     UID: $scope.account.google.id, 
    }); 
    } 
}); 

HTML 페이지 : 당신이 HTML 페이지를 볼 수있는

<div ng-controller="AboutCtrl"> 
    <div> 
    <h3>User Data</h3> 
    <p>{{account.google.id}}</p> 
    <pre>{{account|json}}</pre> 
    <p>User has logged in before:{{isUser}}</p> 
    <pre>{{users|json}}</pre> 
    <div> 
     <p>This compares the current UID's in the db to the current user's uid</p> 
     <div ng-repeat='usr in users'> 
     <p>{{usr.UID}} {{usr.UID == account.google.id}}</p> 
     </div> 
    </div> 
    </div> 
</div> 

가하는 컨트롤러하지만 HTML 페이지와 같은 비교가 컨트롤러 반면 정답을 반환 하지 않습니다.

답변

2

인증되지 않은 경우 $ scope.account는 null입니다. 여기에 $ onAuth를 사용하는 것이 더 나을 수도 있습니다.

$ onAuth(); 클라이언트의 인증 상태에 대한 변경 사항을 수신합니다. 클라이언트의 인증 상태가 변경되면 제공된 콜백이 시작됩니다. Source

$ scope.users = $ firebase (usrRef). $ asArray()는 비동기입니다. $ scope.user를 반복 할 때이 값은 비어있을 수 있습니다. Firebase에서 데이터가 수신 될 때까지 기다려야합니다. 체크 아웃 $ loaded();

$ loaded(); Firebase에서 초기 배열 데이터가 다운로드 될 때 해결되는 약속을 반환합니다. 약속은 배열 자체로 해결됩니다. Source

+0

감사합니다. 그것은 그 문제의 일부였습니다. 다른 문제는 'user.UID'가 정의되지 않은 상태로 반환된다는 것입니다. –

관련 문제