Firebase身份验证-没有来自Google登录提供商的电子邮件

时间:2019-04-26 21:41:02

标签: android firebase-authentication google-signin

使用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);


3 个答案:

答案 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");
相关问题