在 Firebase / Angularfire 中成功登录后重定向 $authWithOAuthRedirect

Redirecting after login with successful $authWithOAuthRedirect in Firebase / Angularfire

根据 AngularFire Auth API$authWithOAuthRedirect 应该 return 在 return 到您的应用程序后解决的承诺。我在下面创建了工厂,但是 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 将是非空的。