【发布时间】:2021-01-06 23:59:26
【问题描述】:
我是使用 firebase 的新手,所以我很感激我得到的每一个帮助。我正在尝试创建登录和注册活动。当我尝试注册用户时,问题出在我的注册活动中。 createUserWithEmailandPassword() 和 addOnCompleteListener() 方法不起作用。我试图在调试器中检查它们,它从 mAuth.createUserWithEmailandPassword().addOnCompleteListener() 到函数的末尾,当我尝试运行它时,它向我显示吐司消息“注册失败!”。我想是最后的祝酒词。我该怎么办?
更新: 现在我收到消息“用户注册成功”,但我的 firebase 实时数据库和身份验证中仍然没有任何内容。
Registe Activity:
public class RegisterActivity extends AppCompatActivity {
private EditText password, email, faculty, specialization, firstName, lastName;
private Button signUp;
private TextView existingUser;
private ProgressBar progbar;
// private FirebaseDatabase firebaseUser;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
signUp = findViewById(R.id.btnSignUp);
existingUser = findViewById(R.id.AlreadyRegistered);
password = findViewById(R.id.Password);
email = findViewById(R.id.Email);
faculty = findViewById(R.id.faculty);
specialization = findViewById(R.id.specialization);
firstName = findViewById(R.id.firstName);
lastName = findViewById(R.id.lastName);
progbar = findViewById(R.id.progressBar);
mAuth = FirebaseAuth.getInstance();
//Firebase tabela user
//Creare si inserare user Adaugare user in firebase
//Functie de salvare in FireBase
signUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerUser();
}
});
}
private void registerUser(){
String emailEt = email.getText().toString().trim();
String passwordEt = password.getText().toString().trim();
String facultyEt = faculty.getText().toString().trim();
String specializtionEt = specialization.getText().toString().trim();
String firstNameEt = firstName.getText().toString().trim();
String lastNameEt = lastName.getText().toString().trim();
// if(firstNameEt.isEmpty())
// Toast.makeText(this, "This field is requried!",
// Toast.LENGTH_SHORT).show();
//
// if(lastNameEt.isEmpty())
// Toast.makeText(this, "This field is requried!",
// Toast.LENGTH_SHORT).show();
//
// if(passwordEt.isEmpty())
// Toast.makeText(this, "This field is requried!",
// Toast.LENGTH_SHORT).show();
//
// if(facultyEt.isEmpty())
// Toast.makeText(this, "This field is requried!",
// Toast.LENGTH_SHORT).show();
//
// if(specializtionEt.isEmpty())
// Toast.makeText(this, "This field is requried!",
// Toast.LENGTH_SHORT).show();
//
// if(emailEt.isEmpty())
// Toast.makeText(this, "This field is requried!",
// Toast.LENGTH_SHORT).show();
//
// if(!Patterns.EMAIL_ADDRESS.matcher(emailEt).matches())
// Toast.makeText(this, "Provide a valid email",
// Toast.LENGTH_SHORT).show();
//
// if(passwordEt.length() < 6)
// Toast.makeText(this, "Password should be at least 6 characters!",
// Toast.LENGTH_SHORT).show();
// progbar.setVisibility(View.VISIBLE);
//Verifica daca userul este deja inregistrat
mAuth.createUserWithEmailAndPassword(emailEt, passwordEt)
.addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
User user = new User(lastNameEt, firstNameEt, facultyEt, specializtionEt, emailEt, passwordEt);
FirebaseDatabase.getInstance().getReference("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(RegisterActivity.this,
"User has been registered successfully!", Toast.LENGTH_SHORT).show();
progbar.setVisibility(View.GONE);
startActivity(new Intent(getApplicationContext(), LoginActivity.class));
} else{
Toast.makeText(RegisterActivity.this, "Faild to register!", Toast.LENGTH_SHORT).show();
progbar.setVisibility(View.GONE);
}
}
});
} else{
Toast.makeText(RegisterActivity.this, "Faild to register!", Toast.LENGTH_SHORT).show();
progbar.setVisibility(View.GONE);
}
}
});
}
}
build.gradle(:app)
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "ro.ase.proiect_draft"
minSdkVersion 26
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.firebase:firebase-database:19.5.1'
implementation platform('com.google.firebase:firebase-bom:26.2.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-auth:20.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
//MAterial Design
implementation 'com.google.android.material:material:1.2.0-alpha02'
//Rounded Image View
implementation 'com.makeramen:roundedimageview:2.3.0'
//Navigation Component
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.0-rc03'
implementation 'androidx.navigation:navigation-ui-ktx:2.2.0-rc03'
//DarkMode Theme
implementation 'com.google.android.material:material:1.0.0'
}
【问题讨论】:
-
我要直言不讳:永远不要将用户的未加密密码存储在您的数据库中——即使在测试期间也是如此。立即将其从您的
User课程中删除。 Firebase 身份验证将为您安全可靠地处理密码。 -
我建议您将“此字段为必填项!”消息更具体。目前,这些字段中的任何一个都可能丢失,您的用户不知道是哪一个。使用“需要电子邮件!”,“需要教师!”等等。
标签: android firebase firebase-realtime-database firebase-authentication