使用Google提供程序登录时,电子邮件为空
我尝试使用3个Gmail帐户-其中1个可以,但是2个我为空。 控制台中正确列出了这三个名称,并且帐户的电子邮件为“标识符”
currentUser = FirebaseAuth.getInstance().getCurrentUser();
String Email = currentUser.getEmail();
代码创建身份验证:
providers = Arrays.asList(
new AuthUI.IdpConfig.GoogleBuilder().build(),
new AuthUI.IdpConfig.FacebookBuilder().build()
);
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(providers)
.setIsSmartLockEnabled(false)
.build(),MY_REQUEST_CODE);
答案 0 :(得分:1)
试试这个,我遇到了同样的问题,但在使用 Firebase 进行身份验证后应用 GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(LoginActivity.this);
后,问题得到了解决。
private void firebaseAuthWithGoogle(String idToken) {
AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
String a="Email: "+user.getEmail()
+"\nName: "+user.getDisplayName()+"\nL= "+user.getProviderData();
//Here I got email field as null: 1 of them is OK, but with remaining I get null
Log.d(TAG, "onComplete: USER DATA:\n"+a);
// Add this code to get current sign-in user info
GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(LoginActivity.this);
if (acct != null) {
String personName = acct.getDisplayName();
String personGivenName = acct.getGivenName();
String personFamilyName = acct.getFamilyName();
String personEmail = acct.getEmail();
String personId = acct.getId();
Uri personPhoto = acct.getPhotoUrl();
Log.d(TAG, "onComplete: RESULT--> "+"Name: "+personName+"\n"+
"Email: "+personEmail+"\n"+
"ID: "+personId+"\n"+
"Photo: "+personPhoto+"\n"+
"PersonGiven Name: "+personGivenName+"\n");
}
// updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Snackbar.make(r, "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
// updateUI(null);
}
// ...
}
});
}
答案 1 :(得分:0)
我将代码从测试项目复制到我的主项目中,问题已解决。我不明白为什么。
答案 2 :(得分:0)
我遇到了同样的问题,没有返回任何Google电子邮件地址。
添加范围电子邮件后:
var provider = new this.$firebase.auth.GoogleAuthProvider();
provider.addScope('email');
它正在返回提供商数据中的电子邮件地址。
我在Facebook登录中遇到的同样问题。我需要添加这样的范围
var provider = new this.$firebase.auth.FacebookAuthProvider();
provider.addScope("email");