当前位置: 首页 > 知识库问答 >
问题:

使用android的Firebase电子邮件和密码认证-用户注册

郑和泰
2023-03-14

最近为我的应用程序创建了一个简单的注册页面,该页面接受电子邮件和密码这两个值,检查它们是否有效,然后将它们传递给firebase函数来创建用户。值被正确传递,然而,我总是得到消息说“注册失败”。firebase连接是活动的,我已经允许用户使用电子邮件和密码认证注册。

我觉得这是我的build.gradle文件的一个问题,可能有错误的依赖关系,但是,我是Firebase的新手,无法解决这个问题。

下面是我的注册表单,build.gradle文件和控制台错误日志。任何帮助都将不胜感激。

注册表

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class RegisterPage extends AppCompatActivity {


private EditText userEmail,userPassword;
private Button regButton;
private FirebaseAuth firebaseAuth;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register_page);
    setUpUIViews();

    firebaseAuth = FirebaseAuth.getInstance();

    regButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (validate()){

                //Upload Data to the database

                String user_email = userEmail.getText().toString().trim();
                String user_password = 
 userPassword.getText().toString().trim();

                firebaseAuth.createUserWithEmailAndPassword(user_email,user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                       if(task.isSuccessful()){
                        Toast.makeText(RegisterPage.this, "Registration Complete", Toast.LENGTH_SHORT).show();
                       startActivity(new Intent(RegisterPage.this,MainActivity.class));
                    }



                   else {

                          // FirebaseAuthException e = (FirebaseAuthException)task.getException();
                      // Toast.makeText(RegisterPage.this,"Failed Registation: "+e.getMessage(),Toast.LENGTH_SHORT).show();


                            Toast.makeText(RegisterPage.this, "Registration Failed", Toast.LENGTH_SHORT).show();
                        }

                   }
                });
            }

        }
    });

}


private void setUpUIViews(){

    userEmail = (EditText)findViewById(R.id.Email_Register);
    userPassword = (EditText)findViewById(R.id.Password_Register);
    regButton = (Button)findViewById(R.id.Register_btn);
}

private Boolean validate(){

    Boolean result = false;

    String email = userEmail.getText().toString();
    String password = userPassword.getText().toString();

    if (email.isEmpty() && password.isEmpty()){

        Toast.makeText(this,"Please enter all your details correctly", Toast.LENGTH_SHORT).show();

    }

    else {

        result = true;


    }

    return result;

}


}
repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'



    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    classpath 'com.google.gms:google-services:3.1.0'
}
}

allprojects {
repositories {
    google()
    jcenter()

    //added maven
    maven {
        url "https://maven.google.com" // Google's Maven repository
    }
}
}

 task clean(type: Delete) {
delete rootProject.buildDir
}
apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
    applicationId "com.example.bradwaterhouse.discovernottingham"
    minSdkVersion 15
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.google.firebase:firebase-database:11.0.4'
implementation 'com.google.firebase:firebase-auth:11.0.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
//added in
compile 'com.google.firebase:firebase-auth:11.0.4'
}


apply plugin: 'com.google.gms.google-services'

这是如果在else循环中替换“登录失败”文本时得到的错误消息。

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.bradwaterhouse.discovernottingham, PID: 4473
              java.lang.ClassCastException: com.google.firebase.FirebaseException cannot be cast to com.google.firebase.auth.FirebaseAuthException
                  at com.example.bradwaterhouse.discovernottingham.RegisterPage$1$1.onComplete(RegisterPage.java:59)
                  at com.google.android.gms.tasks.zzf.run(Unknown Source:23)
                  at android.os.Handler.handleCallback(Handler.java:789)
                  at android.os.Handler.dispatchMessage(Handler.java:98)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6541)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Application terminated.

共有1个答案

邓德惠
2023-03-14

在与OP交谈后,错误是:

为了解决这个问题,他必须启用google identity toolkit API。

此外,最好加上下面的内容,以便能够知道到底是什么问题:

在你的else中加上这个,你会得到更清楚的错误:

Toast.makeText(RegisterPage.this, "User Authentication Failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();

或将其添加日志中:

Log.i("error is :", task.getException().getMessage());
 类似资料:
  • 除了教练通知每个成员他们各自的密码之外,还有人能想出解决这个问题的方法吗?

  • 主要内容:创建用户,登录,注销在本章中,我们将向您介绍如何使用Firebase电子邮件/密码身份验证。在开始之前,需要设置登录方法,参考以下图所示 - 点击设置登录方法,然后选择电子邮件地址/密码,打开启用并保存,如下图所示 - 创建用户 要验证用户,可以使用方法。 示例 让我们来看看下面的一个例子。参考代码 - 接下来,您可以检查Firebase仪表板中的数据库,并查看用户是否已创建成功。如下所示,已经创建了一个用户账号 -

  • 我想知道是否有能力登录与电子邮件和用户id+密码,我有一个项目,我想让用户添加一个唯一的号码(实际上是我们公司提供的工作识别号码),以能够登录到该计划将保持私人公司就业。 我需要firebase认证拒绝登录,即使电子邮件和密码是正确的,但用户id是错误的。

  • 任务清理(类型:Delete){Delete RootProject.BuildDir}

  • 我创建了一个与我的 Flutter 应用配合使用的登录和注册屏幕,使用 Firebase 作为后端身份验证服务。我能够在登录,注册和重置密码屏幕之间切换。 问题 目前,注册屏幕接受输入的任何电子邮件地址,无论它是否真实。例如,如果我键入 gvevg@gverwbgw.com,它将允许用户注册。当涉及到虚假帐户和垃圾邮件等时,这显然是一个问题。 目标 我基本上想能够编辑我的代码,自动生成一个电子邮件