2013-06-04 3 views
0

난 firebase 간단한 로그인 인증에 angularjs를 사용하고 있으며 단일 페이지 응용 프로그램을 만들고 싶습니다. 이 전에, 나는 service, main controller을 처리하려고했지만, FirebaseAuthClient()를 호출 할 때마다 경로가 있어야하기 때문에 충분하지 않다고 생각합니다. 또한 anglebase.run()에 FirebaseAuthClient()를 넣으려고합니다.이 프로그램은 앱이 시작될 때 초기화됩니다. 하지만 경로가있을 때는 작동하지 않을 것입니다. 전체 페이지로드가 아니기 때문이라고 생각합니다.단일 페이지 응용 프로그램에서 Firebase 인증을 처리하는 방법

좋아

, 그리고 여기에 내가 원하는 것입니다, 로그인 페이지 제외

  • , 모든 경로 (페이지)는 로그인이 필요합니다.
  • 전역 적 FirebaseAuthClient()가 모든 경로를 검사하므로 다시 호출 할 필요가 없습니다.

답변

0

내가 이해가 확실하지 않다() FirebaseAuthClient에서 돌아 글로벌 user. 전체 앱에서 FirebaseAuthClient와 모든 login()을 한 번만 초기화하면됩니다. 그것은 싱글 톤이며 인증 자격은 수행하는 모든 Firebase 작업에 적용됩니다.

왜 이것이 사실이 아니라고 생각합니까? 어떤 종류의 오류가보고 있습니까?

+0

안녕하세요, 마침내 내 문제는 무엇인지 알아 냈습니다. 여기서 간단하게 만듭니다. 단일 페이지 앱은 전체 페이지로드가 아니기 때문에 모든 경로에서 "사용자가 로그인 했음"을 어떻게 처리 할 수 ​​있습니까? 경로가 변경 될 때마다 FirebaseAuthClient()를 호출 하시겠습니까? 이것이 angularjs 또는 firebase와 관련이 있는지 잘 모르겠습니다. – vzhen

+0

FirebaseAuthClient가 반환 한 마지막 결과 만 기억하면됩니다. 다시 전화 할 필요는 없습니다. –

+0

나중에 사용할 수 있도록 인증 정보를 어디에 저장해야합니까? angularjs의 쿠키 또는 $ rootScope? 사용자 인증 후 auth.id (사용자 ID)를 직접 호출 할 수 있습니까? – vzhen

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()을 호출하여 사용자가 로그인했는지 여부를 확인할 수 있습니다.

관련 문제