2013-06-04 35 views
0

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

好吧, 这里是我想要的,

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

回答

0

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

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

+0

嗨,我终于想出了什么是我的问题。在这里,我简单说一下。由于单页面应用程序不是整页加载。我怎样才能在每条路线上处理“用户登录”? 每次路由更改时调用FirebaseAuthClient()? 我不确定这是与angularjs还是firebase相关。 – vzhen

+0

您应该只记得FirebaseAuthClient返回给您的最后一个结果。你不需要再次调用它。 –

+0

我应该在哪里存储auth信息供以后使用? Cookie或$ rootScope在angularjs中? 无论如何,我可以直接在用户身份验证后直接调用auth.id(用户标识)吗? – vzhen

0

这是我在将auth转移到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()来查看用户是否登录或没有。

相关问题