登录后使用Firebase / Angularfire中的成功$ authWithOAuthRedirect重定向

时间:2015-01-23 12:03:01

标签: angularjs oauth firebase angular-ui-router angularfire

根据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,我可以在刷新后看到登录信息。那么,任何人都可以解释为什么它没有像预期的那样重定向吗?

1 个答案:

答案 0 :(得分:1)

authWithOAuthRedirect()返回的承诺有点误导,因为它永远不会实现。因为浏览器将重定向远离页面,所以我们永远不会实际调用promise,因为成功重定向时页面的状态已经丢失。

如果您在应用的某个页面上想要在用户登录时自动重定向,请尝试ref.onAuth(function(authData) { ... })。如果用户已登录,则authData将为非null。

相关问题