Poszukuję solidnego sposobu na udostępnienie "bieżącego identyfikatora użytkownika" we wszystkich kontrolerach. Korzystanie z: Firebase Proste logowanie: Email/Password AuthenticationFACTORY: pobierz bieżące user.id dla Firebase Proste logowanie (e-mail/hasło)
Moja ida: Potrzebuję "fabryki", którą mogę wprowadzić do kontrolerów, , aby "aktualny identyfikator użytkownika" był zawsze dostępny.
wymyśliłem ten kod:
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;
}
]);
Moja najprostsza Kontroler wygląda następująco:
function ToDoCtrl($scope, User) {
$scope.MyUser = User;
$scope.MyUser.test = 'Test';
}
W HTML (kątowych podszablonów) mam:
<h2>{{MyUser.id}}</h2>
<h2>{{MyUser.email}}</h2>
<h2>{{MyUser.provider}}</h2>
<h2>{{MyUser.test}}</h2>
=> id , e-mail, dostawca są "niezdefiniowani". W konsoli widzę "FACTORY: User: Login successfully:" z poprawnym użytkownikiem - Object.
=> Asynchroniczny problem z ładowaniem danych?
Mam również eksperymentował (bez powodzenia):
$timeout(function() {
currentUser = user;
}
Taka fabryka byłaby bardzo przydatna! Dzięki za wskazanie mnie we właściwym kierunku!
Edycja 1.1: Teraz z $ rootscope włamać
=> sam efekt - MyController jest zbyt szybki - fabryka zwalniać.
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 za wszelkie pomocne sugestie! Zastanów się, jak inni to rozwiązują!
Zrobiłem solidny system logowania z tymi ognistymi rzeczami, które opublikuję, kiedy wrócę do domu. To może być idealne do tego, co próbujesz tutaj zrobić. – jaredwilli