Firebase SDK(使用电子邮件链接进行身份验证)

使用电子邮件链接/无密码的Firebase SDK身份验证与使用电子邮件链接/密码的Firebase UI身份验证非常相似。我们可以通过向用户发送包含链接的电子邮件来使用Firebase身份验证来注册任何用户, 然后他们可以单击该链接进行登录。在此过程中还将验证用户电子邮件地址。
使用电子邮件链接身份验证有很多优点:
低摩擦注册并登录
跨应用程序的密码重用风险低, 这甚至会损害甚至精心选择的密码的安全。
验证用户身份并验证该用户是电子邮件地址的合法所有者。用户只需要执行可访问的电子邮件即可登录, 并且使用正确的密码列表, 不需要电话号码, 不需要社交媒体帐户。用户无需输入密码即可安全登录。以前使用电子邮件标识符登录的现有用户也可以升级为仅使用电子邮件登录。
如果用户忘记了密码, 他们仍然可以登录而无需重置密码。因此, 让我们开始编码部分, 看看如何使用Firebase SDK实施电子邮件链接身份验证。
步骤1:
在第一步中, 我们必须执行以下准备步骤:

  1. 创建一个Android项目。
  2. 创建Firebase项目。
  3. 手动或通过Firebase协助将Firebase添加到Android项目或应用程序。
  4. 添加所需的库和JSON文件。
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
第2步:
下一步, 我们必须启用电子邮件链接密码才能登录。我们必须同时启用电子邮件/密码和电子邮件链接。
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
第三步:
我们必须确保我们具有动态链接, 因为当选择链接时, 我们的应用程序需要捕获该链接才能登录或在Firebase中注册。
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
步骤4:
在下一步中, 我们将以与Firebase UI电子邮件链接身份验证相同的方式添加域。你的域名将与操作代码设置匹配, 我们将在下一步中对其进行定义。
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
步骤5:
我们要做的最后一步是确保我们的项目具有SHA-1和SHA-256密钥。我们将以与上一节Firebase UI:使用电子邮件链接进行身份验证相同的方式设置SHA-1和SHA-256密钥。
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
步骤6:
下一步是实现一个活动布局, 该布局包含电子邮件的编辑文本以及两个用于sign_in和email_click的按钮, 方法如下:
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
步骤7:
在下一步中, 我们将修改MainActivity.java以使用Firebase SDK通过以下方式实现电子邮件链接身份验证:
public class MainActivity extends AppCompatActivity {//Declaration of EditText, Button, FirebaseAuth, String and SharedPreferencesprivate EditText email; private Button signin; private String email_address, email_link, pending_email; String TAG="EMAIL_AUTH"; FirebaseAuth auth; private SharedPreferences pref; private static final String KEY_PENDING_EMAIL="key_pending_email"; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Fetching id?s of EditText and buttonemail=(EditText)findViewById(R.id.editText); signin=(Button)findViewById(R.id.SignInButton); //Making button disable signin.setEnabled(false); //Getting instances of FirebaseAuthauth=FirebaseAuth.getInstance(); //Reading preferences if it?s already been setpref=getApplicationContext().getSharedPreferences("MyPref", Context.MODE_PRIVATE); pending_email=pref.getString(KEY_PENDING_EMAIL, null); //Checking for pending email?.if(pending_email!=null){email.setText(pending_email); Log.d(TAG, "Getting Shared Preferences"+pending_email); }//Creating intent for catching the link Intent intent = getIntent(); if (intent != null & & intent.getData() != null) {email_link = intent.getData().toString(); Log.d(TAG, "got an intent: " + email_link); // Confirm the link is a sign-in with email link.if (auth.isSignInWithEmailLink(email_link)) {signin.setEnabled(true); }}}//Implementing event handlerspublic void onSignInClickedButton(View view) {//Getting email address from the text field email_address = email.getText().toString(); //Calling signInWithEmailLink using the FirebaseAuth instances with OnCompleteListener and OnComplete callback. auth.signInWithEmailLink(email_address, email_link).addOnCompleteListener(new OnCompleteListener< AuthResult> () {@Overridepublic void onComplete(@NonNull Task< AuthResult> task) {// remove shared preferences, set everything back to defaultpending_email = null; SharedPreferences.Editor editor = pref.edit(); editor.remove(KEY_PENDING_EMAIL); editor.commit(); email.setText(""); //Checking for task if (task.isSuccessful()) {Toast.makeText(getApplicationContext(), "Successfully signed in with email link!", Toast.LENGTH_SHORT).show(); AuthResult result = task.getResult(); } else {Toast.makeText(getApplicationContext(), "Error signing in with email link", Toast.LENGTH_SHORT).show(); }}}); }public void onEmailClick(View view) {email_address = email.getText().toString(); //Validation checkif (email_address.equals("")) {Toast.makeText(getApplicationContext(), "Enter Email Address!", Toast.LENGTH_SHORT).show(); return; }//Save Email Address using SharedPreference Editor.SharedPreferences.Editor editor=pref.edit(); editor.putString(KEY_PENDING_EMAIL, email_address); editor.commit(); //Set-up our ActionCodeSettingsActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder().setAndroidPackageName(getPackageName(), false, /* install if not available? */null/* minimum app version */).setHandleCodeInApp(true).setUrl("https://auth.example.com/emailSignInLink").build(); //Implement sendSignInLinkToEmail method to send the link to email addressauth.sendSignInLinkToEmail(email_address, actionCodeSettings).addOnCompleteListener(new OnCompleteListener< Void> () {@Overridepublic void onComplete(@NonNull Task< Void> task) {if (task.isSuccessful()) {Toast.makeText(getApplicationContext(), "Email Sent", Toast.LENGTH_LONG).show(); }}}); }}

【Firebase SDK(使用电子邮件链接进行身份验证)】输出:
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片
Firebase SDK(使用电子邮件链接进行身份验证)

文章图片

    推荐阅读