如何在单页面应用中处理Firebase身份验证

时间:2013-06-04 11:57:17

标签: angularjs firebase firebase-security

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

确定, 这就是我想要的,

  • 除登录页面外,每条路线(页面)都需要登录。
  • 全局FirebaseAuthClient()检查每条路线,因此我无需再次调用它。
  • 从FirebaseAuthClient()
  • 返回的全局user

2 个答案:

答案 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()来查看用户是否已登录。