我在向GitHub /从GitHub成功重定向身份验证后触发AngularFire的$ onAuth()时遇到问题。如果我使用auth.$authWithOAuthRedirect('github')
它将重定向到GitHub并在成功验证后再次返回,但当它返回到我的Angular应用程序时,auth.$onAuth()
回调不会被调用。如果我然后刷新页面,它会被预期的authinfo调用。如果我退出($unauth()
)并重新登录,则在我刷新页面之前,$onAuth()
回调不再被调用。
起初我认为这是我做错的事情,但我注意到如果我改变代码使用$authWithOAuthPopup()
代替,应用程序按预期工作:$onAuth()
回调很快被调用当弹出窗口关闭时,传递authdata。
如果我只是误解了如何使用它,请注意这是否是AngularFire中的错误。我搜索了一些示例,我认为我正确使用它,但如果问题出在我的代码中,请告诉我应该怎么做。
我已将一个最小的repo案例放入GitHub仓库:https://github.com/drstearns/angularfire-oath-redir。代码当前使用$authWithOAuthRedirect
,您会注意到,当您第一次进行身份验证时从GitHub返回时,或者在您退出并重新登录后,没有任何内容记录到控制台。如果您在签名后刷新页面在,它工作正常。如果您将其更改为使用$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
答案 0 :(得分:1)
感谢您的举报!这确实是一个bug,虽然它实际上在firebase.js本身。幸运的是,它最近已修复。如果您将firebase.js参考从2.2.4更新到2.3.1,则应解决该问题。