AngularFire $onAuth() 在从 GitHub 初始重定向后未触发,但在页面刷新时触发;弹出窗口工作正常

AngularFire $onAuth() not firing after initial redirect back from GitHub, but fires on page refresh; works fine with popup

我在成功重定向身份验证后让 AngularFire 的 $onAuth() 触发时遇到问题 to/from GitHub。如果我使用 auth.$authWithOAuthRedirect('github') 它将重定向到 GitHub 并在成功验证后再次返回,但是当它返回到我的 Angular 应用程序时,不会调用 auth.$onAuth() 回调.如果我随后刷新页面,它确实会使用预期的 authinfo 进行调用。如果我注销 ($unauth()) 并重新登录,则 $onAuth() 回调不会再次调用,直到我刷新页面。

起初我认为这是我做错了什么,但我注意到如果我将代码更改为使用 $authWithOAuthPopup(),应用程序将按预期工作:调用 $onAuth() 回调一旦弹出窗口关闭,传递 authdata。

请注意确定这是否是 AngularFire 中的错误,如果我只是误解了如何使用它。我已经搜索了示例,我认为我使用它是正确的,但如果问题出在我的代码中,请告诉我应该如何做。

我已将最小的回购案例放入 GitHub 回购:https://github.com/drstearns/angularfire-oath-redir。该代码当前使用 $authWithOAuthRedirect,您会注意到,当您从 GitHub 首次验证时 return 以及退出并重新登录后,没有任何内容记录到控制台. 如果您在登录后刷新页面,它可以正常工作。如果将其更改为使用 $authWithOAuthPopup(),它也可以正常工作。

这是相关代码的片段:

angular.module('ChatApp', ['firebase'])
    .constant('firebaseUrl', 'https://info343chat.firebaseio.com')
    .controller('ChatController', function($scope, $firebaseArray, $firebaseObject, $firebaseAuth, firebaseUrl) {
        //create reference to the Firebase
        var rootRef = new Firebase(firebaseUrl);

        //create an authentication service for this firebase
        var auth = $firebaseAuth(rootRef);

        //when the user clicks the signin button...
        $scope.signin = function() {
            //authenticate with github using a popup window
            //BUG? change this to $authWithOAuthPopup and
            //it works correctly
            auth.$authWithOAuthRedirect('github')
                .catch(function(err) {
                    console.error(err);
                });
        };

        //when the user clicks the signout button...
        $scope.signout = function() {
            //un-authenticate (sign out)
            auth.$unauth();
        };

        //when the authentication state changes...
        auth.$onAuth(function(authData) {
            //for debugging
            //not firing after initial redirect back from GitHub
            console.log('$onAuth');
            console.log(authData);

            //if we have authentication data
            if (authData) {
                //...
            }
            else {
                //...
            }
        }); //$onAuth()

        //...other controller code
    }); //ChatController

感谢您的报告!这确实是一个错误,尽管它实际上在 firebase.js 本身。幸运的是它最近被修复了。如果您将 firebase.js 参考从 2.2.4 更新到 2.3.1,问题应该得到解决。