在 Android 版 Firebase 中忘记密码

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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_
    android:layout_
    android:layout_gravity="center"

    android:fitsSystemWindows="true"
    tools:context=".LoginActivity">

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="@dimen/activity_horizontal_margin">




        <TextView
            android:layout_
            android:layout_
            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_
            android:layout_
            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_
            android:layout_>

            <EditText
                android:id="@+id/email"
                android:layout_
                android:layout_
                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_
            android:layout_
            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_
            android:layout_
            android:layout_marginTop="10dp"
            android:background="@null"
            android:text="@string/btn_back"
            android:textColor="@color/colorAccent" />

    </LinearLayout>

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_
        android:layout_
        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);

【讨论】:

以上是关于在 Android 版 Firebase 中忘记密码的主要内容,如果未能解决你的问题,请参考以下文章

qtcreator忘记密码

Flutter Firebase GoogleSignIn 在发行版中不起作用

linux mysql 忘记密码 怎么修改密

如何使用 Firebase 实现忘记密码功能?

Android Studio中的Firebase android jars文档/javadoc [重复]

密码忘记了怎么找回?