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,问题应该得到解决。
我在成功重定向身份验证后让 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,问题应该得到解决。