Firebase Android重置后发送新密码

时间:2018-11-08 01:54:23

标签: android firebase firebase-authentication

因此,我有一个非常简单的“忘记密码”系统设置。似乎工作正常。

private void resetUser(final String email){
        mAuth.sendPasswordResetEmail(email) .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                    Toast.makeText(ForgotActivity.this, "Confirmation Email Sent", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

问题是,更改此密码后,我还需要从Firebase获取新密码,因为我的登录方案同时使用Firebase和应用服务器。因此,如果他们在Firebase上更改了密码,并且该密码尚未发送到应用服务器的数据库中,那么他们将无法登录。

因此,我需要某种方法来将新密码重置后自动发送回应用程序。

这可能吗?

1 个答案:

答案 0 :(得分:0)

好吧……这真的再简单不过了:

首先,我们将我的原始代码添加到最后,然后将其发送回品牌NewLoginActivity:

private void resetUser(final String email){
    mAuth.sendPasswordResetEmail(email) .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "Email sent.");
                Toast.makeText(ForgotActivity.this, "Confirmation Email Sent", Toast.LENGTH_SHORT).show();
                Toast.makeText(ForgotActivity.this, "Enter New Password", Toast.LENGTH_LONG).show();
                Intent intent = new Intent(
                        ForgotActivity.this,
                        NewLoginActivity.class);
                startActivity(intent);
                finish();
            }
        }
    });

}

在NewLoginActivity中,FirebaseAuth验证新的电子邮件和密码组合,然后将其发送以更新密码:

private void loginUser( final String email, final String password) {

        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Log.d(TAG, "signInWithEmail:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updatePassword(email, password);
                            updateUI(user);
                        } else {

                            Log.w(TAG, "signInWithEmail:failure", task.getException());
                            Toast.makeText(NewLoginActivity.this, "mAuth sign-in failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }

                    }
                });
}

此新登录活动与旧登录活动完全相同,不同之处在于,当用户输入电子邮件地址和新密码时...新密码现在保存到数据库中,并且只能从ForgotPassword活动中访问此NewLoginActivity :

private void updatePassword(final String email, final String pass){
    Log.d(TAG, "Password Updated Line 359");

    String cancel_req_tag = "newpass";

    StringRequest strReq = new StringRequest(Request.Method.POST,
            URL_FOR_UPDATE, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, "Update Pass Response: " + response.toString());


        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d(TAG, "Update Pass Resp Error: Shit " + error.getMessage());
        }
    }) {
        @Override
        protected Map<String, String> getParams () {
            Map<String, String> params = new HashMap<String, String>();
            params.put("email", email);
            params.put("pass", pass);
            return params;
        }
    };

    AppSingleton.getInstance(getApplicationContext()).addToRequestQueue(strReq, cancel_req_tag);
    Log.d(TAG, "Pass Request: " + strReq);

    Toast.makeText(NewLoginActivity.this, "Password Updated", Toast.LENGTH_SHORT).show();

}

Et VOILA!因此,用户重设密码...被发送到firebase输入新密码...在执行此操作时,该应用程序使用外观相同但全新的登录名。他们输入他们的电子邮件地址和密码,现在新密码将保存到Firebase和应用程序数据库中,并且用户已登录。像馅饼一样简单!

我想唯一的问题是用户是否在输入新密码之前关闭了应用程序...但是您可以创建一个SavedPreference甚至修改先前的意图,然后使用它发送原始登录名来更新密码。因此,...不仅可以获得新的Firebase密码,而且还有更多的选择权。