【问题标题】:Forgot password in Firebase for Android在 Android 版 Firebase 中忘记密码
【发布时间】:2017-08-05 15:16:28
【问题描述】:

我相信有一种方法可以在 Firebase 中更改您的密码,但有没有一种方法可以让用户忘记密码并可以分配一个新密码或使用电子邮件或 SMS OTP 重新进行身份验证。我在网上查了一下,但似乎找不到。

如果有办法如何实现,所有函数调用都需要做什么。你能用一个例子指导我吗?

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    听起来您正在寻找发送密码重置电子邮件。见this example from the Firebase documentation

    FirebaseAuth.getInstance().sendPasswordResetEmail("user@example.com")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });
    

    【讨论】:

    • 这是否也会阻止用户输入相同的密码,有什么办法可以阻止?
    • 内置电子邮件+密码验证提供程序没有配置选项。如果需要,可以考虑创建自己的提供程序。
    • @FrankvanPuffelen,这只能在应用程序中完成吗?表示我只想通过手机设置新密码..
    • 用手机号注册怎么办?
    【解决方案2】:

    重置 Android FireBase 密码

    Java 文件

        public class ResetPasswordActivity extends AppCompatActivity {
    
        private EditText inputEmail;
    
        private Button btnReset, btnBack;
    
        private FirebaseAuth auth;
    
        private ProgressBar progressBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_reset_password);
    
            inputEmail = (EditText) findViewById(R.id.email);
    
            btnReset = (Button) findViewById(R.id.btn_reset_password);
    
            btnBack = (Button) findViewById(R.id.btn_back);
    
            progressBar = (ProgressBar) findViewById(R.id.progressBar);
    
            auth = FirebaseAuth.getInstance();
    
            btnBack.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
    
            btnReset.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    String email = inputEmail.getText().toString().trim();
    
                    if (TextUtils.isEmpty(email)) {
                        Toast.makeText(getApplication(), "Enter your registered email id", Toast.LENGTH_SHORT).show();
                        return;
                    }
    
                    progressBar.setVisibility(View.VISIBLE);
    
                    auth.sendPasswordResetEmail(email)
    
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Toast.makeText(ResetPasswordActivity.this, "We have sent you instructions to reset your password!", Toast.LENGTH_SHORT).show();
                                    } else {
                                        Toast.makeText(ResetPasswordActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
                                    }
    
                                    progressBar.setVisibility(View.GONE);
                                }
                            });
                }
            });
        }
    
    }
    

    XML 文件

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
    
        android:fitsSystemWindows="true"
        tools:context=".LoginActivity">
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:gravity="center"
            android:orientation="vertical"
            android:padding="@dimen/activity_horizontal_margin">
    
    
    
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:padding="10dp"
                android:text="@string/lbl_forgot_password"
                android:textColor="@android:color/white"
                android:textSize="20dp" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:gravity="center_horizontal"
                android:padding="@dimen/activity_horizontal_margin"
                android:text="@string/forgot_password_msg"
                android:textColor="@android:color/white"
                android:textSize="14dp" />
    
            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <EditText
                    android:id="@+id/email"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="10dp"
                    android:layout_marginTop="20dp"
                    android:hint="@string/hint_email"
                    android:inputType="textEmailAddress"
                    android:textColor="@android:color/white"
                    android:textColorHint="@android:color/white" />
            </android.support.design.widget.TextInputLayout>
    
            <!-- Login Button -->
    
            <Button
                android:id="@+id/btn_reset_password"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dip"
                android:background="@color/colorAccent"
                android:text="@string/btn_reset_password"
                android:textColor="@android:color/black" />
    
            <Button
                android:id="@+id/btn_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:background="@null"
                android:text="@string/btn_back"
                android:textColor="@color/colorAccent" />
    
        </LinearLayout>
    
        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_gravity="center|bottom"
            android:layout_marginBottom="20dp"
            android:visibility="gone" />
    </android.support.design.widget.CoordinatorLayout>
    

    【讨论】:

      【解决方案3】:

      复制粘贴documentation:

      FirebaseAuth auth = FirebaseAuth.getInstance();
      String emailAddress = "user@example.com";
      
      auth.sendPasswordResetEmail(emailAddress)
              .addOnCompleteListener(new OnCompleteListener<Void>() {
                  @Override
                  public void onComplete(@NonNull Task<Void> task) {
                      if (task.isSuccessful()) {
                          Log.d(TAG, "Email sent.");
                      }
                  }
              });
      

      【讨论】:

        【解决方案4】:

        此文档链接应该可以帮助您:

        DOCUMENTATION

        简而言之,Firebase 有一个名为 changePassword 的方法可以使用,点击链接了解如何实现它。

        【讨论】:

          【解决方案5】:

          试试这个方法

          private void resetpasswoord() {
              FirebaseAuth auth = FirebaseAuth.getInstance();
              String emailaddress = resest_email.getText().toString();
              auth.sendPasswordResetEmail(emailaddress)
                      .addOnCompleteListener(new OnCompleteListener<Void>() {
                          @Override
                          public void onComplete(@NonNull Task<Void> task) {
                              if (task.isSuccessful()) {
                                  Log.d(TAG, "Email sent.");
                                  Toast.makeText(getApplicationContext(), "Check Your Email", Toast.LENGTH_SHORT).show();
                              } else {
                                  Toast.makeText(ForgotPasswordActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                              }
                          }
                      });
          }
          

          【讨论】:

            【解决方案6】:

            如果 Unity 试试这个而不是

                string emailaddress = resest_email.text;
                FirebaseAuth.DefaultInstance.SendPasswordResetEmailAsync(emailaddress).ContinueWith((task =>
                {
            
                    if (task.IsCompleted)
                    {
                        Debug.Log("Email sent.");
            
                    }
                    if (task.IsFaulted)
                    {
                        Firebase.FirebaseException e =
                       task.Exception.Flatten().InnerExceptions[0] as Firebase.FirebaseException;
            
                        GetErrorMessage((AuthError)e.ErrorCode);
                        return;
                    }
            
                }));
            
            }
              void GetErrorMessage(AuthError errorcode)
            {
                string msg = "";
                msg = errorcode.ToString();
            
                print(msg);
            }
            

            【讨论】:

              【解决方案7】:

              以下是通过进度对话框在用户电子邮件地址上发送重置密码链接的简单方法(有时由于客户端的互联网连接速度慢,firebase 需要时间来完成 重置密码 请求,所以 进度对话框会很有帮助)

              public void resetUserPassword(String email){
                      FirebaseAuth mAuth = FirebaseAuth.getInstance();
                      final ProgressDialog progressDialog = new ProgressDialog(ForgotPasswordActivity.this);
                      progressDialog.setMessage("verifying..");
                      progressDialog.show();
              
                      mAuth.sendPasswordResetEmail(email)
                              .addOnCompleteListener(new OnCompleteListener<Void>() {
                                  @Override
                                  public void onComplete(@NonNull Task<Void> task) {
                                      if(task.isSuccessful()){
                                          progressDialog.dismiss();
                                          Toast.makeText(getApplicationContext(), "Reset password instructions has sent to your email",
                                                  Toast.LENGTH_SHORT).show();
                                      }else{
                                          progressDialog.dismiss();
                                          Toast.makeText(getApplicationContext(),
                                                  "Email don't exist", Toast.LENGTH_SHORT).show();
                                      }
                                  }
                              }).addOnFailureListener(new OnFailureListener() {
                          @Override
                          public void onFailure(@NonNull Exception e) {
                              progressDialog.dismiss();
                              Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
                          }
                      });
                  }
              

              【讨论】:

                【解决方案8】:

                如果 Kotlin 是您选择的语言,您可以使用以下语言:

                val fAuth = FirebaseAuth.getInstance()
                fAuth.sendPasswordResetEmail(email).addOnCompleteListener({ listener ->
                        if (listener.isSuccessful) {
                            // Do something when successful
                        } else {
                            // Do something when not successful
                        }
                })
                

                【讨论】:

                  【解决方案9】:

                  如果你是在 Flutter 中做的,使用这个:

                   @override
                  Future<void> resetPassword(String email) async {
                      await _firebaseAuth.sendPasswordResetEmail(email: email);
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 2016-11-04
                    • 2018-02-22
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-07-22
                    • 2018-05-30
                    • 2018-04-17
                    • 2020-05-10
                    • 2015-01-27
                    相关资源
                    最近更新 更多