USINE: obtenir de l'utilisateur actuel.id pour Firebase Simple Login (Email / Mot de passe)

Je suis à la recherche d'un moyen concret d'avoir la "id de l'utilisateur courant" dans tous mes contrôleurs disponibles.
Aide: Firebase Simple Pour Se Connecter : E-Mail /Mot De Passe D'Authentification

Mon ida: j'ai besoin d'une 'Usine' qui je peux injecter dans mes contrôleurs,
pour avoir le 'id de l'utilisateur courant" toujours disponible.

Je suis venu avec ce code:

    app.factory('User', ['angularFire',

    //Get Current UserID

    function(angularFire){

        console.log ('FACTORY: User');
            var currentUser = {};
            var ReturnStr = '';
        var ref = new Firebase("https://myFIREBASE.firebaseio.com/");
        var authClient = new FirebaseAuthClient(ref, function (err, user) {

            if (err) {
                    ReturnStr = 'FACTORY: User Error: ' + err; 
                console.log (ReturnStr);
                        //var User = ReturnStr;
            } else if (user) {
                console.log ('FACTORY: User: Login successfully:');
                console.log (user);
                currentUser = user;
            } else {
                //console.log ('-----------User: Logged Out ---------------');
                    ReturnStr = 'FACTORY: Logged out: Redirect to Login'; 
                console.log (ReturnStr);
                window.location.href = "/login.php";
            }
        });

    return currentUser;
        }
]);

Mon plus simple Contrôleur ressemble:

function ToDoCtrl($scope, User) {
    $scope.MyUser = User;
    $scope.MyUser.test = 'Test';
}

En HTML (angulaire partiels) j'ai:

<h2>{{MyUser.id}}</h2>
<h2>{{MyUser.email}}</h2>
<h2>{{MyUser.provider}}</h2>
<h2>{{MyUser.test}}</h2>

=> id, e-mail, le fournisseur de services 'undefined'. Dans la console, je vois l'USINE: Utilisateur: Login avec succès:' avec le bon utilisateur de l'Objet.

=> chargement Asynchrone des données du problème?

J'ai également expérimenté (sans succès):

        $timeout(function () {
        currentUser = user;
        }

Une telle USINE serait très utile!
Merci pour de me pointer dans la bonne direction!

Edition 1.1: Maintenant, avec $rootscope hack

=> Même effet - mycontroller est trop rapide - usine à ralentir.

app.factory('User', ['$rootScope', '$timeout', 'angularFire',

    //Aktueller Benutzer auslesen

    function($rootScope, $timeout, angularFire){

        console.log ('FACTORY: User');
            var currentUser = {};
            var ReturnStr = '';
        var ref = new Firebase("https://openpsychotherapy.firebaseio.com/");
        var authClient = new FirebaseAuthClient(ref, function (err, user) {

            if (err) {
                    ReturnStr = 'FACTORY: User Error: ' + err; 
                console.log (ReturnStr);
                        //var User = ReturnStr;
            } else if (user) {
                console.log ('FACTORY: User: Login successfully:');
                        //currentUser = user;

            $timeout(function () {
                        ReturnStr = 'FACTORY: Inside timout'; 
                  console.log (ReturnStr);

                            currentUser = user;
                  console.log (currentUser);

                $rootScope.myUser = user;
                $rootScope.myUserID = user.id;
                $rootScope.loggedIn = true;
                            $rootScope.$apply();

                  return currentUser;
            });


            } else {
                //console.log ('-----------User: Logged Out ---------------');
                    ReturnStr = 'FACTORY: Logged out: Redirect to Login'; 
                console.log (ReturnStr);
                        //var User = ReturnStr;
                window.location.href = "/login.php";
            }
        });

    return currentUser;
        }
]);

TAHNKS pour toutes suggestions utiles! Wonderin comment les autres à résoudre ce!

  • J'ai fait un solide système de connexion avec ces incendies choses que je vais poster quand je rentre à la maison un peu. Il pourrait être parfait pour ce que vous essayez de faire ici.
InformationsquelleAutor o_tiger | 2013-06-23