这是我在将auth转移到Singly之前使用的。也许它有帮助?
p4pApp.factory('firebaseAuth', function($rootScope) {
var auth = {},
FBref = new Firebase(p4pApp.FIREBASEPATH);
auth.broadcastAuthEvent = function() {
$rootScope.$broadcast('authEvent');
};
auth.client = new FirebaseAuthClient(FBref, function(error, user) {
if (error) {
} else if (user) {
auth.user = user;
auth.broadcastAuthEvent();
} else {
auth.user = null;
auth.broadcastAuthEvent();
}
});
auth.login = function() {
this.client.login('facebook');
};
auth.logout = function() {
this.client.logout();
};
return auth;
});
的AuthCtrl通用于所有/大多数我的网页。
var AuthCtrl = function($scope, firebaseAuth) {
$scope.login = function() {
firebaseAuth.login();
};
$scope.logout = function() {
firebaseAuth.logout();
};
$scope.isLoggedIn = function() {
return !!$scope.user;
};
// src: Alex Vanston (https://coderwall.com/p/ngisma)
$scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if (phase == '$apply' || phase == '$digest') {
if(fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
$scope.$on('authEvent', function() {
$scope.safeApply(function() {
$scope.user = firebaseAuth.user;
});
});
};
从AuthCtrl内,你可以叫isLoggedIn()来查看用户是否登录或没有。
嗨,我终于想出了什么是我的问题。在这里,我简单说一下。由于单页面应用程序不是整页加载。我怎样才能在每条路线上处理“用户登录”? 每次路由更改时调用FirebaseAuthClient()? 我不确定这是与angularjs还是firebase相关。 – vzhen
您应该只记得FirebaseAuthClient返回给您的最后一个结果。你不需要再次调用它。 –
我应该在哪里存储auth信息供以后使用? Cookie或$ rootScope在angularjs中? 无论如何,我可以直接在用户身份验证后直接调用auth.id(用户标识)吗? – vzhen