我正在使用带有angularjs的firebase简单登录auth,我想创建一个单页应用程序。
在此之前,我已尝试使用service
,main controller
来处理它,但我认为它不够好,因为每次有路由时我都必须调用FirebaseAuthClient()。
我还尝试将FirebaseAuthClient()放在angularjs .run()中,该应用程序启动时会初始化。
但是当有路线时它不会起作用,我认为这是因为不是整页加载。
确定, 这就是我想要的,
user
答案 0 :(得分:0)
我不确定我理解。您只需要在整个应用中初始化FirebaseAuthClient和所有login()一次。它是一个单身人士,您的身份验证凭据适用于您执行的任何Firebase操作。
是什么让你认为事实并非如此?你看到了什么样的错误?
答案 1 :(得分:0)
这是我在将身份验证转移到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()来查看用户是否已登录。