Halo all,
我想在firebase简单登录(facebook)中使用angularjs。但我不知道该怎么做 创建auth共享服务。
我想做的是
$location
我也是angularjs的新手,但我不知道在这种情况下我应该使用哪些服务。
service
或factory
?
如何将以下代码放入角度服务中,然后告诉每个控制器用户是否登录?
var firebaseRef = new Firebase("https://test.firebaseio.com");
var auth = new FirebaseAuthClient(firebaseRef, function(error, user) {
if (user) {
console.log(user);
} else if (error) {
console.log(error);
} else {
console.log('user not login');
}
});
这是我猜的,从user
返回authService
值,所以在控制器中如果存在authService.user
则重定向到登录页面,否则显示登录对话框
登录按钮调用以下代码
authService.login('facebook');
如果我可以这样做,或者有更好的方法,请告诉我?
答案 0 :(得分:6)
这是我到目前为止所使用的......
我还没有实现重定向,但其余的工作正常。
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;
});
});
};
答案 1 :(得分:2)
关于工厂与服务,有一篇很好的博客文章解释了如何处理我建议阅读的选择:http://iffycan.blogspot.com/2013/05/angular-service-or-factory.html
在进行身份验证方面,将登录状态分配给服务中的变量的一般方法似乎没有问题。我们正在考虑与Angular进行更深入的集成以进行身份验证,但是现在这似乎是一种合理的方法。