我尝试将应用程序升级到新的Firebase身份验证方法。我已经完成了大部分工作,但出于某种原因,当我尝试这个时。
myApp.controller('StatusController', function(
$scope, $rootScope,
$location, $firebase, $firebaseAuth, FIREBASE_URL) {
$scope.logout = function() {
Authentication.logout();
$location.path('/login');
} //logout
$rootScope.$onAuth(function(authUser) {
var ref = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
var user = $firebase(ref).$asObject();
user.$loaded().then(function() {
$rootScope.currentUser = user;
});
}); //login
$rootScope.$on('logout', function(e, authUser) {
$rootScope.currentUser = null;
}); //login
}); //StatusController
我得到一个"未定义的不是函数",即使我只是在网站上尝试这个例子。我不确定为什么会这样。仅供参考,此控制器会跟踪身份验证以更新站点导航。
<header>
<nav class="cf" ng-include="'views/nav.html'"
ng-controller="StatusController"></nav>
</header>
答案 0 :(得分:3)
你可以解决这样的问题,理想情况下你会使用$ rootScope,但这种方式也可以在不使用$ rootScope的情况下运行,因为Firebase员工似乎以类似rootScope的方式实现了$ onAuth。
作为您的应用程序的示例:
myApp.controller('StatusController', function($scope,$firebase,$firebaseAuth,FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseAuth(ref);
auth.$onAuth(function(authData){
console.log(authData);
$scope.userStatus = authData.password.email;
}); // Check user status
}); // StatusController
PS:authData.password.email仅将电子邮件地址插入$ scope.userStatus。
答案 1 :(得分:0)
用$ timeout包装$ onAuth函数,使其在摘要循环中处理!
// wrap the $onAuth function with $timeout so it processes
// in the digest loop.
onAuth: function onLoggedIn(callback) {
auth.$onAuth(function(authData) {
$timeout(function() {
callback(authData);
});
});
}