我已成功设置Firebase电子邮件/密码身份验证,但出于安全考虑,我希望用户确认她/他的电子邮件。 它在Firebases网站上说:
当用户使用电子邮件地址和密码注册时,会发送确认电子邮件以验证其电子邮件地址。
但是当我注册时,我没有收到确认电子邮件。
我看过,只能找到发送密码重置电子邮件的代码,但不能找到发送电子邮件确认的代码。
我看过这里:
https://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email
任何人都知道如何做到这一点?
答案 0 :(得分:94)
我注意到新的Firebase电子邮件身份验证文档没有正确记录。
firebase.auth().onAuthStateChanged(function(user) {
user.sendEmailVerification();
});
请注意:
检查电子邮件是否已经过验证:
firebase.auth().onAuthStateChanged(function(user) {
if (user.emailVerified) {
console.log('Email is verified');
}
else {
console.log('Email is not verified');
}
});
答案 1 :(得分:6)
创建用户后,将返回用户对象,您可以在其中检查用户的电子邮件是否已经过验证。
当用户未经过验证时,您可以在用户对象本身上触发sendEmailVerification方法。
firebase.auth()
.createUserWithEmailAndPassword(email, password)
.then(function(user){
if(user && user.emailVerified === false){
user.sendEmailVerification().then(function(){
console.log("email verification sent to user");
});
}
}).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode, errorMessage);
});
您还可以通过收听AuthState进行检查,以下方法的问题是,每次新会话(通过刷新页面), 发送一封新电子邮件。
firebase.auth().onAuthStateChanged(function(user) {
user.sendEmailVerification();
});
答案 2 :(得分:4)
您可以发送验证电子邮件并检查AuthListener是否已经过验证:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
//---- HERE YOU CHECK IF EMAIL IS VERIFIED
if (user.isEmailVerified()) {
Toast.makeText(LoginActivity.this,"You are in =)",Toast.LENGTH_LONG).show();
}
else {
//---- HERE YOU SEND THE EMAIL
user.sendEmailVerification();
Toast.makeText(LoginActivity.this,"Check your email first...",Toast.LENGTH_LONG).show();
}
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// [START_EXCLUDE]
updateUI(user);
// [END_EXCLUDE]
}
};
答案 3 :(得分:2)
如果你使用编译“com.google.firebase:firebase-auth:9.2.0”和 编译'com.google.firebase:firebase-core:9.2.0'方法sendEmailVerification()将在您更新到9.8.0或更高版本之前解析。在我弄明白之前,大部分时间浪费了。
答案 4 :(得分:0)
我也一直在看这个。好像Firebase改变了您发送验证的方式。对我来说
user.sendEmailVerification()
不起作用。 如果出现错误,例如user.sendEmailVerification()不存在。 使用以下内容。
firebase.auth().currentUser.sendEmailVerification()
答案 5 :(得分:0)
您可以向任何与Firebase Auth帐户链接的用户发送验证电子邮件。例如,在Flutter中,您可以这样做。像:
Future<void> signInWithCredentialAndLinkDetails(AuthCredential authCredential,
String email, String password) async {
// Here authCredential is from Phone Auth
_auth.signInWithCredential(authCredential).then((authResult) async {
if (authResult.user != null) {
var emailAuthCredential = EmailAuthProvider.getCredential(
email: email,
password: password,
);
authResult.user
.linkWithCredential(emailAuthCredential)
.then((authResult,onError:(){/* Error Logic */}) async {
if (authResult.user != null) {
await authResult.user.sendEmailVerification().then((_) {
debugPrint('verification email send');
}, onError: () {
debugPrint('email verification failed.');
});
}
});
}
});
}
答案 6 :(得分:0)
这不是问题的答案,但可能会帮助某人。 不要忘记将您的站点域添加到登录方法下的授权域列表