Firebase:为什么我的电子邮件验证未发送?

问题描述 投票:0回答:1

我正在尝试使用 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 电子邮件。为什么会有延迟?我希望注册后立即发送用户电子邮件验证。

javascript firebase firebase-authentication
1个回答
0
投票

我认为您在使用 Firebase 的

sendEmailVerification
时遇到了电子邮件验证延迟的问题。

可能原因:

  1. 用户状态同步:当您尝试发送验证邮件时,用户的信息可能未完全更新。
  2. 网络延迟:网络可能存在延迟,影响电子邮件传送。
  3. Firebase 后端问题:Firebase 的服务器可能会出现临时问题。

解决方案:

要解决此问题,请确保用户在发送验证电子邮件之前已完全登录。使用

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);
    }
};

说明:

  1. Async/Await:使用
    async/await
    提高可读性并处理一个又一个的步骤。
  2. 响应处理:在进行下一步之前检查注册响应是否成功。
  3. 用户检查:在发送验证电子邮件之前确保用户已登录。
  4. 调试日志记录:添加了控制台日志,以便更好地了解程序流程并帮助识别可能出现问题的位置。
© www.soinside.com 2019 - 2024. All rights reserved.