angularjs与firebase auth共享服务

时间:2013-05-28 00:33:05

标签: angularjs firebase angularjs-service firebase-security

Halo all,

我想在firebase简单登录(facebook)中使用angularjs。但我不知道该怎么做 创建auth共享服务。

我想做的是

  • 创建身份验证服务
  • 使用此身份验证服务检查用户是否已登录每个控制器
  • 如果用户登录/不登录,
  • 控制器将执行$location

我也是angularjs的新手,但我不知道在这种情况下我应该使用哪些服务。 servicefactory

如何将以下代码放入角度服务中,然后告诉每个控制器用户是否登录?

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');

如果我可以这样做,或者有更好的方法,请告诉我?

2 个答案:

答案 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进行更深入的集成以进行身份​​验证,但是现在这似乎是一种合理的方法。