在 Android 上使用 Firebase 3.0 进行电子邮件验证
Email verification using Firebase 3.0 on Android
我知道我们可以使用 Firebase Auth 3.0 验证用户的电子邮件。我在 Android 上找不到任何关于电子邮件验证的文档。我可以在 iOS 和网络上找到相同的内容,但不能在 Android 上找到。对文档的任何 link 都会有所帮助。
从图片中可以清楚地看出,一旦用户登录,他将在电子邮件中收到有关此信息的提示,以确认他的订阅。我已经订阅了自己并在 Auth 选项卡的 users 部分进行了验证,我能够看到我的邮件 ID 和 firebase 生成的唯一用户 ID .这里缺少的是发送到我的电子邮件 ID 的确认电子邮件。有人尝试过这个还是我尝试这个太早了?感谢您的帮助。
更新
在 version 9.6 and higher of the Firebase SDK for Android 中可以使用电子邮件验证。
原回答
Android 尚无法使用电子邮件验证。还回答了 here 更多上下文。
Firebase 团队建议的替代方案
您可以做的一件事是向您的 Firebase 数据库添加一个节点,其中包含所有作为子级的电子邮件地址。您应该使该节点仅可公开读取(通过 Firebase 安全规则)。
然后在您的应用程序中,一旦用户注册/登录,您检查该用户的电子邮件是否在列表中,如果不在,您将他们注销并将他们踢出您的应用程序(并且作为奖励,您甚至可以在您的数据库中记录入侵者的电子邮件地址,这样您以后可以检查谁在尝试访问您的应用程序)。
如果您知道将要测试您的应用程序的人员的电子邮件 ID,这将用于初始测试,直到电子邮件验证进入 Android。
android 的电子邮件验证现在可在 Firebase 中使用。
请参阅此发行说明:
https://firebase.google.com/support/release-notes/android#9.6
由于邮箱验证只适用于Email/Password authentication
,最好发送到createUserWithEmailAndPassword(...)
方法的onComplete
方法,注册成功后。
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
sendVerificationEmail();
....
自定义 sendVerification
方法是:
public void sendVerificationEmail() {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
user.sendEmailVerification()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(SignUpActivity.this, "Signup successful.
Verification email sent", Toast.LENGTH_SHORT).show();
}
}
});
}
}
然后您可以通过调用以下方式检查用户是否已在您的应用中的任何地方验证他们的电子邮件:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null ) {
Log.e(TAG, firebaseUser.isEmailVerified() ? "User is signed in and email is verified" : "Email is not verified");
} else {
Log.e(TAG, "onAuthStateChanged:signed_out");
}
}
};
我知道我们可以使用 Firebase Auth 3.0 验证用户的电子邮件。我在 Android 上找不到任何关于电子邮件验证的文档。我可以在 iOS 和网络上找到相同的内容,但不能在 Android 上找到。对文档的任何 link 都会有所帮助。
从图片中可以清楚地看出,一旦用户登录,他将在电子邮件中收到有关此信息的提示,以确认他的订阅。我已经订阅了自己并在 Auth 选项卡的 users 部分进行了验证,我能够看到我的邮件 ID 和 firebase 生成的唯一用户 ID .这里缺少的是发送到我的电子邮件 ID 的确认电子邮件。有人尝试过这个还是我尝试这个太早了?感谢您的帮助。
更新
在 version 9.6 and higher of the Firebase SDK for Android 中可以使用电子邮件验证。
原回答
Android 尚无法使用电子邮件验证。还回答了 here 更多上下文。
Firebase 团队建议的替代方案
您可以做的一件事是向您的 Firebase 数据库添加一个节点,其中包含所有作为子级的电子邮件地址。您应该使该节点仅可公开读取(通过 Firebase 安全规则)。
然后在您的应用程序中,一旦用户注册/登录,您检查该用户的电子邮件是否在列表中,如果不在,您将他们注销并将他们踢出您的应用程序(并且作为奖励,您甚至可以在您的数据库中记录入侵者的电子邮件地址,这样您以后可以检查谁在尝试访问您的应用程序)。
如果您知道将要测试您的应用程序的人员的电子邮件 ID,这将用于初始测试,直到电子邮件验证进入 Android。
android 的电子邮件验证现在可在 Firebase 中使用。 请参阅此发行说明: https://firebase.google.com/support/release-notes/android#9.6
由于邮箱验证只适用于Email/Password authentication
,最好发送到createUserWithEmailAndPassword(...)
方法的onComplete
方法,注册成功后。
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
sendVerificationEmail();
....
自定义 sendVerification
方法是:
public void sendVerificationEmail() {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
user.sendEmailVerification()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(SignUpActivity.this, "Signup successful.
Verification email sent", Toast.LENGTH_SHORT).show();
}
}
});
}
}
然后您可以通过调用以下方式检查用户是否已在您的应用中的任何地方验证他们的电子邮件:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null ) {
Log.e(TAG, firebaseUser.isEmailVerified() ? "User is signed in and email is verified" : "Email is not verified");
} else {
Log.e(TAG, "onAuthStateChanged:signed_out");
}
}
};