电子邮件不存在时,Firebase重置密码

时间:2017-05-16 12:55:04

标签: android firebase firebase-authentication forgot-password

我正在使用Firebase用户身份验证开发Android应用程序。我面临的问题是我从用户那里获得了电子邮件和密码,然后将该用户创建到firebase中。我没有验证用户输入的电子邮件。现在我想实现重置密码功能。为此,Firebase提供resetPassword方法并向该特定用户发送重置密码电子邮件。但问题是如果电子邮件不存在那么我们该怎么办?

以下是我用于在Firebase中注册用户的代码:

private void registerUser(){

        //creating a new user
        firebaseAuth.createUserWithEmailAndPassword("user email here", "user password here")
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        //checking if success
                        if(task.isSuccessful()){
                            //display some message here 
                        }else{
                            //display some message here 
                        }

                    }
                });

    }

如果此功能有其他选项,请与我们联系。 感谢。

2 个答案:

答案 0 :(得分:1)

请尝试使用以下代码可能对您有帮助,我正在使用此功能。

private FirebaseUser user;
user = FirebaseAuth.getInstance().getCurrentUser();
final String email = user.getEmail();
AuthCredential credential = EmailAuthProvider.getCredential(email,oldpass);
user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
 public void onComplete(@NonNull Task<Void> task) {
    if(task.isSuccessful()){
         user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
             @Override
             public void onComplete(@NonNull Task<Void> task) {
                 if(!task.isSuccessful()){
                     Snackbar snackbar_fail = Snackbar
                                       .make(coordinatorLayout, "Something went wrong. Please try again later", Snackbar.LENGTH_LONG);
                                         snackbar_fail.show();
                   }else {
                      Snackbar snackbar_su = Snackbar
                                          .make(coordinatorLayout, "Password Successfully Modified", Snackbar.LENGTH_LONG);
                                            snackbar_su.show();
                                        }
                                    }
                                });
                   }else {
                            Snackbar snackbar_su = Snackbar
                                    .make(coordinatorLayout, "Authentication Failed", Snackbar.LENGTH_LONG);
                            snackbar_su.show();
                        }
                    }
                });
            }
}

答案 1 :(得分:0)

另一种方法是使用Firebase Admin SDK更改用户密码。来自documentation on updating user information

  

updateUser()方法允许您修改现有用户的数据。它接受用户更新的uid以及包含要更新的UserRecord属性的对象:

admin.auth().updateUser(uid, {
  email: "modifiedUser@example.com",
  emailVerified: true,
  password: "newPassword",
  displayName: "Jane Doe",
  photoURL: "http://www.example.com/12345678/photo.png",
  disabled: true
})
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully updated user", userRecord.toJSON());
  })
  .catch(function(error) {
    console.log("Error updating user:", error);
  });

使用:

  

密码 - 字符串 - 用户的新原始未加密密码。必须至少六个字符。

Firebase Admin SDK的这一部分目前仅在Node.js中可用。但是,如果您还没有Node.js服务器,则可以在Cloud Functions for Firebase中实现该功能。