📅  最后修改于: 2021-01-02 03:30:17             🧑  作者: Mango
正如我们之前讨论的,有两种身份验证方法,即Firebase UI和Firebase SDK。在本部分中,我们将学习如何使用Firebase UI方法使用电子邮件/密码执行身份验证。
Firebase UI是一个开源库,使用非常简单。我们可以自定义它,因为它是开源的。它消除了样板代码(在许多地方几乎没有改动就必须包含的代码部分),并在用户体验和安全性方面促进了最佳实践。一个非常简单的API提供了简单的删除和身份验证。它可以处理从电子邮件地址和密码到电话号码类型身份提供者(例如Google)的各种不同身份验证技术来源的流程。它基于Firebase Auth库构建。
使用此库的最佳实践是使我们的应用程序的登录和注册转换最大化。它为我们的应用程序启用了所有自动单击签名,以供回头用户使用,还可以处理帐户恢复,帐户链接。
让我们开始逐步了解这个完整的过程:
第1步:
第一步,我们将应用程序与Firebase控制台连接。要将应用程序与Firebase连接,请通过以下链接https://www.javatpoint.com/adding-firebase-to-app。
第2步:
一旦我们的应用程序连接到Firebase,我们的下一步就是导入Firebase UI所需的库。
implementation 'com.firebaseui:firebase-ui-auth:4.3.1'
apply plugin: 'com.google.gms.google-services'
第三步:
下一步,我们需要设置或启用身份验证方法。为此,我们必须在Firebase控制台中启用电子邮件密码身份验证。
步骤4:
下一步,我们将转到Android Studio,并创建用于登录和注销的活动。
步骤5:
接下来,我们将修改MainActivity.java文件。我们必须确保我们的应用在调用Firebase身份验证流程之前检查用户是否已从上一个会话登录。为此,我们必须检查Firebase实例,看看是否有人登录。
FirebaseAuth auth=FirebaseAuth.getInstance();
if(auth.getCurrentUser()!=null){
//Already signed in
}else{
//Not signed in
}
步骤6:
我们要做的下一步实际上是开始使用Firebase UI库进行签名。身份验证流的入口点是Auth UI类。我们可以通过AuthUI.getInstances()检索Auth UI的实例。因此,我们要做的是,首先创建登录代码,如下所示:
//Creating a sign-in function which is called on button sign-in button click
public void sign_in(View view) {
FirebaseAuth auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
Toast.makeText(getApplicationContext(), "User already sign in signout first", Toast.LENGTH_SHORT).show();
}else{
//Choosing Authentication provider
List providers= Arrays.asList(new AuthUI.IdpConfig.EmailBuilder().build());
//Creating and launching sign-in intent
startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setAvailableProviders(providers).build(),12345);
}
}
步骤7:
我们必须创建onActivityResult(),因为身份验证UI的流程具有多个响应代码。在此函数,我们将检查请求和响应代码。如果它们匹配,则用户将成功登录。
//Creating onActivityResult and checking response code to make sure we get the right request.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Checking for request code
if(requestCode==12345){
//Successfully signed-in
if(resultCode==RESULT_OK){
//Getting the current user
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
//Showing toast
Toast.makeText(getApplicationContext(),"Successfully signed-in",Toast.LENGTH_SHORT).show();
}
}else{
//Signed-in failed. If response is null the user canceled the sign-in flow using the back button.
//respose.getError().getErrorCode() handle the error.
Toast.makeText(getApplicationContext(),"Unabled to sign in",Toast.LENGTH_SHORT).show();
}
}
步骤8:
在下一步中,我们将执行注销功能。因为如果用户登录,那么还需要注销。我们将通过以下方式创建注销函数:
//Creating sign-out function which is called on button sign-out button click
public void sign_out(View view) {
AuthUI.getInstance().signOut(this).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
//User is now signed out
Toast.makeText(getApplicationContext(),"User is signed out",Toast.LENGTH_SHORT).show();
}
});
}
步骤9:
除了登录和注销,我们还可以删除用户。为此,我们需要实现delete()函数,该函数在单击按钮时调用。如下所示:
public void delete_user(View view) {
AuthUI.getInstance().delete(this).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Toast.makeText(getApplicationContext(), "User is deleted successfully", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Unsuccessful", Toast.LENGTH_SHORT).show();
}
}
});
}
步骤10:
此步骤用于添加新的提供程序。以前,我们使用电子邮件提供商,但可以添加更多提供商,例如Google,电话号码。这可以通过以下方式完成:
List providers= Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.PhoneBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build());
为此,我们必须在Firebase控制台中启用电话和Google提供程序。
输出: