Firebase $ authWithOAuthRedirect не вызывает $ onAuth без обновления страницы
У меня есть простой логин OAuth для Firebase, как показано ниже,официальный учебник для входа в Ionic Firebase на Facebook.
Проблема заключается в том, что, как только я нажимаю на кнопку «Войти через Facebook», меня перенаправляют на Facebook, я вхожу в систему и возвращаюсь обратно в свое приложение. Однако проблема в том, что я остаюсь на странице входа. Странно то, что если я физически обновлю свой браузер (тестирование сionic serve
) нажав F5onAuth
триггеры и я перенаправлен наItems
стр. Если я не обновлю браузер,onAuth
не вызывается.
У кого-то была эта проблема? Как ты это решил?
Обратите внимание, что да, я провел исследование (и немного начинаю его терять), но не могу заставить его работать. Я искал ТАК, пробовал с$ таймаут из групп Google, пытался вызвать $ scope. $ apply (), но все безрезультатно - поэтому, пожалуйста, помогите мне понять, где я делаю это неправильно?
.controller('AppCtrl', function($scope, Items, Auth, $state, $ionicHistory) {
$scope.login = function(provider) {
Auth.$authWithOAuthRedirect(provider).then(function(authData) {
}).catch(function(error) {
if (error.code === "TRANSPORT_UNAVAILABLE") {
Auth.$authWithOAuthPopup(provider).then(function(authData) {
});
} else {
console.log(error);
}
});
};
$scope.logout = function() {
Auth.$unauth();
$scope.authData = null;
$window.location.reload(true);
};
Auth.$onAuth(function(authData) {
if (authData === null) {
console.log("Not logged in yet");
$state.go('app.login');
} else {
console.log("Logged in as", authData.uid);
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.items');
}
$scope.authData = authData; // This will display the user's name in our view
});
})
<ion-view view-title="Members area">
<ion-content padding="true">
<div ng-if="!authData">
<button class="button button-positive button-block" ng-click="login('facebook')">Log In with Facebook</button>
</div>
<div ng-if="authData.facebook">
<div class="card">
<div class="item item-text-wrap">Hello {{authData.facebook.displayName}}!</div>
</div>
<button class="button button-assertive button-block" ng-click="logout()">Log out</button>
</div>
</ion-content>
</ion-view>
редактировать: Я вроде решил это с помощью $ timeout:
$timeout(function(){
Auth.$onAuth(function(authData) {
if (authData === null) {
console.log("Not logged in yet");
$state.go('app.login');
} else {
console.log("Logged in as", authData.uid);
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.items');
}
$scope.authData = authData; // This will display the user's name in our view
});
}, 3000);
Тем не менее, это просто неправильно (мягко говоря), и должен быть лучший способ, поэтому, пожалуйста, предложите один. Кроме того, я заметил, что колоссальная 3-секундная задержка едва достаточна (немного ресурсов, которые я нашел, предположили, что 500 мс будет достаточно, но в моем случае это не так).