根据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
登录,则在刷新后,我可以看到登录已工作。那么任何人都可以阐明为什么它没有按预期重定向吗?
从authWithOAuthRedirect()
返回的承诺有点误导,因为它永远不会实现。由于浏览器将重定向离开页面,因此我们永远无法实际调用承诺,因为成功重定向后页面的状态已丢失。
如果您希望在用户登录时自动重定向应用页面,请尝试ref.onAuth(function(authData) { ... })
。如果用户已登录,则authData
将为非空。