현재 저는 angularfire를 사용하여 사용자 로그인/로그 아웃 상태를 추적 할 수있는 인증 시스템을 보유하고 있습니다. 내가보고있는 가이드는 모든 컨트롤러에서 $ onAuthStateChanged를 사용하도록 제안합니다.
$rootScope.authObj.$onAuthStateChanged(function(firebaseUser) {
if (firebaseUser) {
console.log("Signed in as:", firebaseUser.uid);
});
} else {
console.log("Signed out");
}
});
대신 현재 $ rootScope.session 변수를 사용하여 현재 로그인 한 사용자를 추적합니다. 이것은 대단히 효과적이지만 객체가 그 시점에서 인스턴스화되지 않았기 때문에 다른 컨트롤러의 시작 부분에서이 세션 변수에 액세스 할 수 없습니다. 컨트롤러의 범위에서이 세션 변수에 액세스하는 깨끗한 방법이 있으므로 각 함수에서 데이터베이스에 대한 새로운 참조를 만들 필요가 없습니다 (세션 변수가 설정된 후에 해당 함수가 호출되므로).
좀 더 명확하게 말하십시오.
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);
$ rootScope.session.id가 아직 설정되지 않아서 내 컨트롤러의 상단에서 작동하지 않습니다.
그러나
$scope.addMeeting = function() {
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);
list.$add({
name: $scope.meetingname,
date: firebase.database.ServerValue.TIMESTAMP
});
};
버튼 클릭시 호출되는 함수로 작동하며 페이지가 이미로드 된 이후이므로 $ rootScope.session.id가 그 지점에서 설정됩니다.
------------- 나는 그것이 firebases를 사용하여 작업 할 왔
업데이트 ----------------- 제안 방법론, 그러나 그것은 꽤 보이지 않습니다. firebase의 Auth 객체에있는 리스너 내 모든 것을 중첩 한 다음 if 문을 사용하여 사용자 객체가 null이 아닌지 확인합니다. 당신이 당신의 페이지를 새로 고침 할 때마다 청소 도착 이후
myApp.controller('MeetingsController', ['$scope', '$rootScope', '$firebaseAuth', '$firebaseArray', function($scope, $rootScope, $firebaseAuth, $firebaseArray){
var authObj = $firebaseAuth();
authObj.$onAuthStateChanged(function(firebaseUser) {
if (firebaseUser) {
var ref = firebase.database().ref("users/" + firebaseUser.uid + '/meetings');
var meetings = $firebaseArray(ref);
$scope.addMeeting = function() {
meetings.$add({
name: $scope.meetingname,
date: firebase.database.ServerValue.TIMESTAMP
});
};
$scope.deleteMeeting = function(key) {
meetings.$remove(meetings.$getRecord(key)).then(function(ref) {
})
.catch(function(error){
console.log(error);
});
};
}
}); //onAuthStateChange
}]);
감사합니다. 시험해 보겠습니다. – user3225440