我正在尝试使用 Firebase 发送电子邮件验证,但失败了。
const handleSubmit = (e) => {
e.preventDefault();
fetch("http://localhost:4000/auth/register", {
method: "POST",
body: JSON.stringify({
email,
password,
}),
headers: {
"Content-Type": "application/json",
},
})
.then((res) => {
return res.json()
}).then((data) => {
signInWithEmailAndPassword(auth, email, password);
}).then(() => {
console.log("data", auth.currentUser)
sendEmailVerification(auth.currentUser)
.then(() => {
navigate('/')
})
}).catch((err) => {
console.error(err);
});
};
发送电子邮件验证似乎有延迟。如果我注册 user1,则不会发送电子邮件验证,但在我注册 user2 后,则会发送 user1 电子邮件。为什么会有延迟?我希望注册后立即发送用户电子邮件验证。
我认为您在使用 Firebase 的
sendEmailVerification
时遇到了电子邮件验证延迟的问题。
要解决此问题,请确保用户在发送验证电子邮件之前已完全登录。使用
async/await
逐个处理步骤,并添加一些控制台日志来调试问题。
const handleSubmit = async (e) => {
e.preventDefault();
try {
// Register the user
const response = await fetch("http://localhost:4000/auth/register", {
method: "POST",
body: JSON.stringify({
email,
password,
}),
headers: {
"Content-Type": "application/json",
},
});
const data = await response.json();
if (!response.ok) {
console.error("Registration failed:", data);
return;
}
// Sign in the user
await signInWithEmailAndPassword(auth, email, password);
// Ensure user is signed in
const user = auth.currentUser;
if (user) {
console.log("User signed in:", user);
// Send verification email
await sendEmailVerification(user);
console.log("Verification email sent");
// Navigate to home page
navigate('/');
} else {
console.error("User is not signed in");
}
} catch (err) {
console.error("Error during registration:", err);
}
};
async/await
提高可读性并处理一个又一个的步骤。