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



根据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将为非空。

最新更新