2

晕都,

我想将 angularjs 与 firebase 简单登录(facebook)一起使用。但我不知道如何创建身份验证共享服务。

我想做的是

  • 创建身份验证服务
  • 使用此身份验证服务检查用户是否在每个控制器中登录
  • 控制器将执行$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');
   }
});

这是我的猜测,如果存在,则从控制器中的 so返回user值,然后重定向到登录页面,否则显示带有登录按钮的登录对话框以调用以下代码authServiceauthService.user

authService.login('facebook');

让我知道我是否可以这样做,或者有更好的方法吗?

4

2 回答 2

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;
    });
});
};
于 2013-05-29T08:12:43.923 回答
2

关于工厂与服务,有一篇很好的博客文章解释了如何处理我推荐阅读的选择:http: //iffycan.blogspot.com/2013/05/angular-service-or-factory.html

在进行身份验证方面,您将登录状态分配给服务中的变量的一般方法似乎没问题。我们正在考虑与 Angular 进行更深入的集成以进行身份​​验证,但目前这似乎是一种合理的方法。

于 2013-05-28T22:11:40.400 回答