Firebase 和 angularFire - 从 Google 身份验证获取电子邮件适用于 $authWithOAuthPopup 但失败 $authWithOAuthRedirect

Firebase and angularFire - getting email from Google authentication works with $authWithOAuthPopup but fails with $authWithOAuthRedirect

以下代码片段有效,除非用户的浏览器配置(iOS 和 Chrome,例如)将它发送到 $authWithOAuthRedirect 块 - 然后它失败。

失败,我的意思是 $authWithOAuthRedirect 方法有效,用户可以批准身份验证,但无法将范围正确发送到 Google,并且未请求电子邮件访问。

var provider = 'google';
var scope = {scope:'email'};
var auth = $firebaseAuth(FirebaseInstance.firebase);

auth.$authWithOAuthPopup(provider, scope).then(function (authData, error) {
    if (error && error.code === "TRANSPORT UNAVAILABLE") {
         auth.$authWithOAuthRedirect(provider, function(error) {}, scope);
    }
});

简化,此代码将无法请求用户的电子邮件:

var provider = 'google';
var scope = {scope:'email'};
var auth = $firebaseAuth(FirebaseInstance.firebase);
auth.$authWithOAuthRedirect(provider, function(error) {}, scope);

感谢您的帮助!

我认为问题在于您使用的是非 angular 版本的语法:Firebase.authWithOAuthRedirect(provider[ callback, scope])

您应该使用 AngularFire 版本: $firebaseAuth.$authWithOAuthRedirect(提供者[ 选项])

此版本 returns 一个承诺,因此您的简化代码应如下所示:

var provider = 'google';
var scope = {scope:'email'};
var auth = $firebaseAuth(FirebaseInstance.firebase);
auth.$authWithOAuthRedirect(provider, scope).then(function (authObject) {
    // Handle success
}, function (error) {
    // Handle error
});