android - 如何将电话身份验证与电子邮件身份验证 firebase android 联系起来
问题描述
我正在创建应用程序,用户必须验证他的电话号码,并且必须使用他的电子邮件和密码以及其他文件(如 dob 和所有文件)进行注册。第一个用户将验证电话号码,所以我使用了电话号码无身份验证,一旦完成,用户将导航到电子邮件和密码注册。所以这里用户将使用电子邮件身份验证进行注册。它创建了两个用户标识。所以我想在一个用户ID下进行两种身份验证。
PhoneAuthentication.java
private void signInWithCredential(PhoneAuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(GetOTPActivity.this, "Mobile no authentication is successfully !!!", Toast.LENGTH_SHORT).show();
Intent intent;
intent = new Intent(GetOTPActivity.this, Register.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
} else {
Toast.makeText(GetOTPActivity.this, task.getException().getMessage(),
Toast.LENGTH_LONG).show();
}
}
});
}
电子邮件认证.java
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(Register.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Toast.makeText(Register.this, "Signup Successfully", Toast.LENGTH_SHORT).show();
if (!task.isSuccessful()) {
spotsDialog.dismiss();
Toast.makeText(Register.this, "Signup failed." + task.getException(),
Toast.LENGTH_SHORT).show();
} else {
spotsDialog.dismiss();
userID = mAuth.getCurrentUser().getUid();
User user = new User(edtName.getText().toString(), edtPhone.getText().toString(),
edtEmail.getText().toString(), edtPassword.getText().toString(), edtConfirmPassword.getText().toString(), false);
user_tbl.child(userID).setValue(user);
startActivity(new Intent(Register.this, Login.class));
}
}
});
}
});
解决方案
您只需要使用 linkWithCredential() 即可在其中传递凭证,现在该凭证可以来自任何身份验证,例如 facebook、gmail。
试试这个代码:
mAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "linkWithCredential:success");
FirebaseUser user = task.getResult().getUser();
updateUI(user);
} else {
Log.w(TAG, "linkWithCredential:failure", task.getException());
Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
updateUI(null);
}
// ...
}
});
推荐阅读
- javascript - jQuery .load() 函数后,jQuery sortable() 不起作用
- node.js - 修改 server.js 以使用 heroku 部署处理 api 调用
- google-drive-api - Google Drive API - 转移整个驱动器的所有权(如网络界面)
- angular - ng-template 内容不会在 Angular 中使用引导工具提示的 title 属性内呈现
- vba - 运行时错误“3265”:在此集合中找不到项目。Access 中的 VBA 模块
- sql - 使用 @Formula(休眠注释)时无法提取 ResultSet
- python - 如何在异构列表和字典中使用递归
- javascript - 使用 jsonwebtoken 生成令牌并在 MERN 堆栈中的前端和后端之间传递令牌时出错
- python - CUDA 错误:使用 HuggingFace 训练 BERT 模型时出现 CUBLAS_STATUS_INVALID_VALUE 错误
- gcov - gcov 错误标志 = 66 gcda 文件未生成