Firebase身份验证方法验证登录是否成功

时间:2018-02-20 17:45:14

标签: android firebase firebase-authentication

当我使用Firebase身份验证成功签名时,我试图创建一个给我一个布尔值的方法,问题是我总是变得虚假,即使日志说它不是真的。

这是我的方法:

public boolean signIn(String email, String password, final Context context) {
        Log.d(TAG, "signIn:" + email);
        final boolean[] resultado = {false};

        mAuth = FirebaseAuth.getInstance();
        // [START sign_in_with_email]
        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            userFire = mAuth.getCurrentUser();

                            resultado[0] = true;

                            Log.w(TAG, "signInWithEmail:succes");



                        } else {
                            Log.w(TAG, "signInWithEmail:failure", task.getException());

                        }

                    }
                });

        return resultado[0];
    }

知道如何确保我得到正确的结果吗?

2 个答案:

答案 0 :(得分:3)

Firebase API是异步,这意味着signInWithEmailAndPassword在调用后立即返回,并且它返回的任务的回调将在稍后调用。无法保证需要多长时间。由于该方法会立即返回,因此尚未从回调中填充您返回的值(resultado[0])。

基本上,您尝试从异步的API同步返回值。那不是个好主意。您应该按预期异步处理API。

要详细了解Firebase API为何异步以及您可以从中获得什么,read this article

答案 1 :(得分:2)

您无需使用boolean来检查登录是否正确。

通过以下方法为您完成:

  mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {

如果登录验证成功,则用户将能够登录。

您可以添加Log来检查或向用户显示的祝酒词,告诉他是否成功。

这是另一种选择,因为返回布尔值将不起作用。