0

我正在使用带有 angularjs 的 firebase 简单登录身份验证,我想创建一个单页应用程序。在此之前,我曾尝试使用service,main controller来处理它,但我认为这还不够好,因为每次有路由时我都必须调用 FirebaseAuthClient()。我还尝试将 FirebaseAuthClient() 放在 angularjs .run() 中,它会在应用程序启动时进行初始化。但是当有路由时它不起作用,我认为这是因为没有完整的页面加载。

好的,这就是我想要的,

  • 除了登录页面,每个路由(页面)都需要登录。
  • 全局 FirebaseAuthClient() 检查每条路线,所以我不需要再次调用它。
  • user从 FirebaseAuthClient() 返回的全局变量
4

2 回答 2

0

我不确定我是否理解。您只需在整个应用程序中初始化 FirebaseAuthClient 和所有 login() 一次。这是一个单例,您的身份验证凭据适用于您执行的任何 Firebase 操作。

是什么让你认为事实并非如此?你看到什么样的错误?

于 2013-06-04T17:16:00.287 回答
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() 即可查看用户是否已登录。

于 2013-06-06T08:38:47.350 回答