0

angularjsでfirebaseのシンプルなログイン認証を使用しており、単一ページのアプリを作成したいと考えています。この前に、を使用して処理しようとしserviceましmain controllerたが、ルートがあるたびに FirebaseAuthClient() を呼び出す必要があるため、十分ではないと思います。また、アプリの起動時に初期化する FirebaseAuthClient() を angularjs .run() に入れようとしました。しかし、ルートがある場合は機能しません。ページが完全にロードされていないためだと思います。

わかりました、そしてここに私が欲しいものがあります、

  • ログインページ以外は、すべてのルート(ページ)でログインが必要です。
  • すべてのルートをチェックするグローバル FirebaseAuthClient() であるため、再度呼び出す必要はありません。
  • userFirebaseAuthClient() から返されるグローバル
4

2 に答える 2

0

私は上手く理解できていない気がします。アプリ全体で FirebaseAuthClient とすべての login() を 1 回だけ初期化する必要があります。これはシングルトンであり、認証資格情報は実行するすべての 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 に答える