使用 Firebase 注销后再次登录时数据被删除

问题描述 投票:0回答:2

这是我的firebase google登录..我想添加用户名和电子邮件信息以保存在firebase实时数据库中..所以我添加了put方法..但这并没有按我的预期工作。每次我注销并使用相同的谷歌账户登录时,用户ID下的所有其他数据都会被删除,即使数据位于其他节点中。

private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
    AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), 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 userID = mAuth.getCurrentUser().getUid();
                        String userName = mAuth.getCurrentUser().getDisplayName();
                        String userEmail = mAuth.getCurrentUser().getEmail();
                        DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference().child("Users");
                        Map newPost = new HashMap();
                        newPost.put("userName", userName);
                        newPost.put("userEmail", userEmail);
                        current_user_db.setValue(newPost);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w("TAG", "signInWithCredential:failure", task.getException());
                        Toast.makeText(SignUpActivity.this, "Authentication failed.",
                                Toast.LENGTH_LONG).show();
                        // updateUI(null);
                    }
                    // ...
                }
            });
}
android firebase firebase-realtime-database google-signin
2个回答
0
投票

当您使用“setValue”方法时,它会覆盖所有数据,请尝试使用 updateChildren 来代替,

完整代码:

private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), 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 userID = mAuth.getCurrentUser().getUid();
                    String userName = mAuth.getCurrentUser().getDisplayName();
                    String userEmail = mAuth.getCurrentUser().getEmail();
                    DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference().child("Users");
                    Map newPost = new HashMap();
                    newPost.put("userName", userName);
                    newPost.put("userEmail", userEmail);
                    current_user_db.updateChildren(newPost); // This is the important line
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w("TAG", "signInWithCredential:failure", task.getException());
                    Toast.makeText(SignUpActivity.this, "Authentication failed.",
                            Toast.LENGTH_LONG).show();
                    // updateUI(null);
                }
                // ...
            }
        });

}


0
投票

我刚刚从代码中删除了 setValue() 函数。

 private void firebaseAuthWithGoogle(String idToken){
    AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()){
                        Log.d("TAG","signInWithCredential:success");
                        FirebaseUser user = auth.getCurrentUser();

                        UserModel users = new UserModel();
                        users.setEmail(user.getEmail());
                        users.setName(user.getDisplayName());
                        users.setPhoneNo(user.getPhoneNumber());
                        database.getReference().child("Users").child(user.getUid());

                        Intent intent = new Intent(SignInActivity.this, MainActivity.class);
                        startActivity(intent);
                        Toast.makeText(SignInActivity.this, "Signed in with Google",Toast.LENGTH_SHORT).show();

                    }else{
                        Log.w("TAG","signInWithCredential:failure",task.getException());
                    }
                }
            });
}
© www.soinside.com 2019 - 2024. All rights reserved.