有用户登录Firebase,在我的视图中,$ scope.auth返回当前登录用户,我可以访问其数据。
但是在我的控制器中,$ scope.auth.user返回null。
myApp.controller('quoteController', ['$scope', '$firebase', '$firebaseSimpleLogin',
function($scope, $firebase, $firebaseSimpleLogin) {
$scope.auth = $firebaseSimpleLogin(dataRef);
console.log($scope.auth.user);
});
console.log($ scope.auth.user)==' null'。
为什么会这样?我知道用户已登录.angleFire文档说,即使创建了多个$ firebaseSimpleLogin对象,简单登录的登录状态对应用程序是全局的。"那么$ scope.auth.user是否应该包含当前用户?
答案 0 :(得分:7)
登录需要异步联系服务器。您无法立即访问下一行的变量,因为尚未检索它。此外,您需要在用户对象存在之前调用login()。假设从另一个页面视图中持有登录名,或者已经调用了login(),您可以采取一些方法来完成您想要的操作。
使用$getCurrentUser()等待身份验证过程解析并获取当前经过身份验证的用户帐户:
angular.module("sampleApp", ["firebase"])
.controller("SampleController", ["$scope", "$firebase", "$firebaseSimpleLogin",
function($scope, $firebase, $firebaseSimpleLogin) {
var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
$scope.auth = $firebaseSimpleLogin(ref);
$scope.auth.$getCurrentUser().then(function(user) {
console.log(user);
});
}
]);
利用auth events:
angular.module("sampleApp", ["firebase"])
.controller("SampleController", ["$scope", "$firebase", "$firebaseSimpleLogin",
function($scope, $firebase, $firebaseSimpleLogin) {
var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
$scope.auth = $firebaseSimpleLogin(ref);
$scope.$on('$firebaseSimpleLogin:login', function() {
console.log($scope.auth.user);
});
}
]);
或者您可以使用在调用login时返回的承诺:
angular.module("sampleApp", ["firebase"])
.controller("SampleController", ["$scope", "$firebase", "$firebaseSimpleLogin",
function($scope, $firebase, $firebaseSimpleLogin) {
var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
$scope.auth = $firebaseSimpleLogin(ref);
$scope.auth.$login('twitter').then(function() {
console.log($scope.auth.user);
});
}
]);
答案 1 :(得分:2)
这很可能是由于调用firebaseSimpleLogin
的异步性质造成的。甚至他们的例子也有回调
var auth = new FirebaseSimpleLogin(chatRef, function(error, user) {
if (error) {
// an error occurred while attempting login
console.log(error);
} else if (user) {
// user authenticated with Firebase
console.log('User ID: ' + user.uid + ', Provider: ' + user.provider);
} else {
// user is logged out
}
});
如果您检查回调中的值,您应该会看到用户数据。