根据AngularFire Auth API,$authWithOAuthRedirect
应返回在返回您的应用后已解决的承诺。我在下面创建了工厂,但login()
中的承诺似乎无法在成功授权后解决;没有任何东西被记录到控制台。因此$state.go()
无法解雇,用户也无法重定向到app
状态。
(function (angular) {
'use strict';
var module = angular.module('app');
module.factory('AuthFactory', [
'$firebaseAuth',
'$state',
'Config',
function ($firebaseAuth, $state, Config) {
var ref = new Firebase(Config.firebase.api);
var FirebaseAuth = $firebaseAuth(ref);
FirebaseAuth.login = function () {
return this.$authWithOAuthRedirect('google')
.then(function (authData) {
console.log('Logged in as:', authData.uid, authData);
$state.go('app');
})
.catch(function (error) {
console.error('Authentication failed:', error);
});
}.bind(FirebaseAuth);
return FirebaseAuth;
}
]);
}(window.angular));
如果我在控制器中记录$getAuth
,我可以在刷新后看到登录信息。那么,任何人都可以解释为什么它没有像预期的那样重定向吗?
答案 0 :(得分:1)
从authWithOAuthRedirect()
返回的承诺有点误导,因为它永远不会实现。因为浏览器将重定向远离页面,所以我们永远不会实际调用promise,因为成功重定向时页面的状态已经丢失。
如果您在应用的某个页面上想要在用户登录时自动重定向,请尝试ref.onAuth(function(authData) { ... })
。如果用户已登录,则authData
将为非null。