2013-05-28 54 views
2

暈所有,與firebase身份驗證共享服務的angularjs

我想使用與firebase簡單登錄(Facebook)的angularjs。但我不知道如何 創建auth共享服務。

我想要做的就是

  • 創建認證服務
  • 使用這種身份驗證服務來檢查,如果每個控制器用戶的loggedIn
  • 控制器將如果用戶的loggedIn /不登錄做$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'); 
    } 
}); 

這裏是我猜,從authService所以在控制器返回user值,如果authService.user存在,那麼重定向到的loggedIn頁否則顯示登錄對話框有 登錄按鈕調用下面的代碼

authService.login('facebook'); 

讓我知道我是否可以這樣做,還是有更好的方法?

回答

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; 
    }); 
}); 
}; 
+0

哇,你讓我的一天。我在想如何返回值和auth對象。現在我明白了,將它們分開。非常感謝 – vzhen

+0

沒問題,樂於幫忙! – axzr

2

關於工廠與服務,有一個很好的博客文章,解釋如何處理,我建議選擇閱讀:http://iffycan.blogspot.com/2013/05/angular-service-or-factory.html

在做認證,你的狀態分配簽署了一個變量,一般方法方面服務似乎沒問題。我們正在考慮與Angular進行更深入的身份驗證集成,但現在這似乎是一種合理的方法。

+0

好的,期待更深入的整合升級 – vzhen