【问题标题】:How to update email from Firebase in Android?如何在 Android 中更新来自 Firebase 的电子邮件?
【发布时间】:2018-03-19 06:42:37
【问题描述】:

我正在使用此代码:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.updateEmail("user@example.com")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User email address updated.");
                }
            }
        });

但我仍然无法更新登录个人的用户电子邮件 ID。其他工作正常,但不是这个。

【问题讨论】:

  • 执行代码后是否有任何logcats或错误?
  • 没有没有错误
  • 但是其他的东西,比如注册、登录、发送电子邮件验证工作正常,只有这个不工作
  • 显然,你必须先登录,然后更新你所知道的操作。 :Important: To set a user's email address, the user must have signed in recently检查你是否已经登录然后更新操作...
  • 是的,我登录了……我 100% 确定,因为我可以将验证电子邮件发送到我登录的电子邮件中……只有更改密码和更改电子邮件不起作用

标签: java android firebase firebase-authentication


【解决方案1】:

您需要重新验证您的用户。根据文档,更改主电子邮件地址是一项敏感操作。

重新认证:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        // Get auth credentials from the user for re-authentication
        AuthCredential credential = EmailAuthProvider
                .getCredential("user@example.com", "password1234"); // Current Login Credentials \\
        // Prompt the user to re-provide their sign-in credentials
        user.reauthenticate(credential)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Log.d(TAG, "User re-authenticated.");
                        //Now change your email address \\
                        //----------------Code for Changing Email Address----------\\
                        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                        user.updateEmail("user@example.com")
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if (task.isSuccessful()) {
                                            Log.d(TAG, "User email address updated.");
                                        }
                                    }
                                });
                        //----------------------------------------------------------\\
                    }
                });

【讨论】:

  • Ohk Rahul 先生,谢谢您的回答,我知道如何获取当前用户的电子邮件 ID,但我也如何获取密码?我知道在 getEmail() 的帮助下,我可以获取电子邮件 ID,但是密码呢?
  • Thanx Rahul Sir 它的工作.. 但我如何能够将密码存储在共享首选项中?我的意思是说我知道如何在 Shared Preference 中保存数据但如何保存密码?
  • 在登录过程中从您的EditText中检索密码并保存即可,与保存电子邮件相同,但标签不同。如果我的回答对你有帮助,请采纳,方便其他人找到。
  • Ohk Rahul Sir 它被接受了.. 你的回答非常有帮助,非常有帮助
【解决方案2】:

对于科特林

 // need to sign user in immediately before updating the email 
        auth.signInWithEmailAndPassword("currentEmail","currentPassword")
        .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success now update email                
                    auth.currentUser!!.updateEmail(newEmail)
                        .addOnCompleteListener{ task ->
                        if (task.isSuccessful) {
               // email update completed
           }else{
               // email update failed
                    }
       }
       } else {
                    // sign in failed
                }
            }

【讨论】:

    【解决方案3】:

    您使用以下代码来更新 firebase 数据库中的记录..

        /**
     * User data change listener
     */
    private void updateRecord(String Email) {
        // User data change listener
        String userId = mFirebaseDatabase.push().getKey();
        mFirebaseDatabase.child(userId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);
                user.setEmail(Email);
                mFirebaseDatabase.child(userId).setValue(user);
    
            }
    
            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                Log.e(TAG, "Failed to read user", error.toException());
            }
        });
    }
    

    【讨论】:

    • 谢谢你能给我完整的代码吗?因为 User ` user = dataSnapshot.getValue(MyAccount.class); user.setEmail(电子邮件); mFirebaseDatabase.child(userId).setValue(user);` 这里 m 出错
    • 用户用户可以定义插入它的 pojo 类。你定义 MyAccount 对象。
    • 此代码用于更改数据库中的数据,与更改用户的电子邮件无关。
    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2017-06-12
    • 2016-12-18
    相关资源
    最近更新 更多