Я пытаюсь проверить, если firebase user
уже выполнил вход, проверив, существует ли объект user
. Однако, когда я обновить страницу, firebase функция работает асинхронной загрузки страницы, прежде чем firebase вернула user
объект и перенаправляется пользователь прибудете, даже если они технически вошли вAngularFire routeProvider проверить, был ли пользователь подписан в
См код ниже:.
app.config(['$routeProvider', '$locationProvider', '$waitForAuth','ngResource', function($routeProvider, $locationProvider, $waitForAuth, $ngResource) {
$routeProvider
.when('/', {
templateUrl: 'views/home.html',
controller: 'MainCtrl'
})
.when('/signup', {
templateUrl: 'views/signup.html',
controller: 'SignupCtrl'
})
.when('/classes', {
templateUrl: 'views/class_lesson.html',
controller: 'classLessonCtrl',
resolve: {
"firebaseUser": function($waitForAuth) {
//user = firebase.auth().currentUser;
firebase.auth().onAuthStateChanged(function(user) {
user = firebase.auth().currentUser;
if (user){
console.log("user signed in");
return user;
}
else {
//window.location.replace('/signup');
console.log(user);
console.log("user not signed in");
}
});
*
}
}
});
$locationProvider.html5Mode(true);
}]);
Я обыскал и обнаружил, что некоторые люди используют Promise.all
, чтобы дождаться, когда пользовательский объект будет отсортирован, но я не уверен, как его правильно реализовать. Могу ли я получить совет? Или есть другое решение?
var p = new Promise(function(resolve, reject) {
// Do an async task async task and then...
firebase.auth().onAuthStateChanged(function(user) {
user = firebase.auth().currentUser;
});
if(/* good condition */user!=null (?) {
resolve('Success!');
}
else {
reject('Failure!');
}
});
p.then(function() {
/* do something with the result */
}).catch(function() {
/* error :(*/
});