有一个用户登录到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‘。
为什么是这种情况?我知道用户已经登录了。angularFire文档说,“对于应用程序来说,简单登录的登录状态是全局的,即使创建了多个$firebaseSimpleLogin对象。”那么$scope.auth.user不应该包含当前用户吗?
发布于 2014-05-06 18:35:17
登录需要异步与服务器联系。您不能立即访问下一行中的变量,因为它尚未被检索。此外,您还需要在用户对象存在之前调用login()。假设有一个从另一个页面视图中持久化的登录,或者已经调用了login(),那么您可以采取一些方法来实现您想要的结果。
使用$getCurrentUser()等待解析和获取当前已验证的用户帐户的auth进程:
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);
});
}
]);利用八月事件
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);
});
}
]);也可以使用调用登录时返回的承诺:
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);
});
}
]);发布于 2014-05-06 04:07:29
这很可能是由于调用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
}
});如果您检查回调中的值,您应该会看到用户数据。
https://stackoverflow.com/questions/23484381
复制相似问题