当前位置: 首页 > 知识库问答 >
问题:

firebase sendEmailVerification在未发送的电子邮件地址上未给出错误

公良弘毅
2023-03-14

我正在使用Firebase Auth为我的React应用程序开发一个身份验证系统。当用户注册时,firebase auth 会注册用户 (createUserWithEmailAndPassword),并返回一个promise,其中 auth.uid 和 auth.emailVerified 设置为“false”。这很好。

然后我使用sendEmailVerification()方法来验证电子邮件地址。我已经对代码进行了测试,对于“有效”和“现有”的电子邮件地址,它都可以正常工作。“catch”确实会按预期给出重复电子邮件地址的错误。问题是,它不会发送不存在的电子邮件(我认为这是正确的行为),但它会给出一个错误(这样我就可以向用户显示),而它不会。

有人可以解释为什么我没有收到不存在的电子邮件地址的错误吗?

export const unpSignUp = (newUser) => {
    console.log("newUser", newUser);
    return (dispatch, getState, { getFirebase, getFirestore }) => {
        const firebase = getFirebase();
        const firestore = getFirestore();
        firebase.auth().createUserWithEmailAndPassword(
        newUser.unp_a05_email,
        newUser.unp_a10_password
        )
        .then((response) => {
        return firestore
            .collection("unps")
            .doc(response.user.uid)
            .set({
                unp_a02_surname: newUser.unp_a02_surname,
                unp_a03_name: newUser.unp_a03_name,
                unp_a06_verify_email_sent_datetime: null,
                unp_a07_email_verified_on_datetime: null,
                unp_a18_acc_created_on_datetime: moment().format("YYYY MM DD HH:mm:ss"),
            });
        })
            .then((response) => {
            console.log("SIGNUP SUCCESS ", response);
            // user has been signed up, next step is to send verification email
            dispatch({ type: SIGNUP_SUCCESS })
        })
        .then(() => {
            // user has been signed up, next step is to send verification email
            console.log('send email adr verification')
            return firebase.auth().currentUser.sendEmailVerification()
        })
        .then( (response) => {
            console.log("Verification email sent", response);
            const user = firebase.auth().currentUser
            console.log('current user', user)
            const unp = firestore.collection("unps").doc(user.uid);
            return unp.update({
            unp_a06_verify_email_sent_datetime: moment().format("YYYY MM DD HH:mm:ss"),
            })
        })
        .then( () => {
            console.log(`unp_a06_verify_email_sent_datetime update to ${moment().format("YYYY MM DD HH:mm:ss")} `)
        })
        .catch((error) => {
            console.log("SIGNUP ERROR", error);
            console.log("SIGNUP ERROR CODE", error.code);
            console.log("SIGNUP ERROR MESAGE", error.message);
            dispatch({ type: SIGNUP_ERROR, error });
        });
    };
};

共有1个答案

韩喜
2023-03-14

从Firebase参考,

< code > sendEmailVerification 的返回类型是< code>Promise

如果未指定actionCodeSettings,则不会将URL附加到操作URL。提供的状态URL必须属于由开发人员在控制台中列入白名单的域。否则将抛出错误。

因此无法检查它是否是有效的电子邮件id。(这是预期行为,因为接收邮件的服务器有时可能会关闭,因此有重试退回邮件的概念)

 类似资料:
  • 我使用AWS SES服务发送电子邮件与验证的测试电子邮件地址在SES和使用相同的来源。 我正试图将电子邮件发送到其他电子邮件地址,但无法发送。这是给我的错误“电子邮件地址未经验证。以下身份未通过在US-EAST-1地区的检查”。 发送电子邮件的代码参考:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-send-email-

  • 我正在开发PHP应用程序,注册后,使用Amazon SES(简单电子邮件服务)向注册的电子邮件地址发送激活邮件。 但是SES只向经过验证的用户发送电子邮件。 如何将激活链接发送到任何未经验证的电子邮件地址?

  • 我正在尝试使用Amazon SES发送电子邮件。我在地区工作过,刚刚把我的地区切换到,我无法向我的个人gmail账户发送电子邮件。我已经从地址验证了的

  • 你好;我正在使用s.o上给出的答案进行smtp邮件;(如果搜索,相信这是第一个结果) 但我仍然没有收到邮件;任何人都可以帮助发现任何错误或提供替代解决方案吗?我已经使用了内置的邮件程序,但它没有被认证,请参阅 -

  • 我想使用亚马逊的简单电子邮件服务发送电子邮件。 我验证了我的域名以及我想发送的电子邮件地址。 对于两者,它都表示。 现在,当我使用AWS控制台的发送测试电子邮件向myemail@outlook.com发送测试电子邮件时,我只收到错误消息: 电子邮件地址未验证。以下身份在区域EU-WEST-1中检查失败:myemail@outlook.com(请求ID: 9fb78de1-2673-11e6-bbb

  • 这个代码应该发送一封电子邮件到指定的地址,当我硬编码“文本” 努力编码的文本和主题,它发送罚款!注意:使用GMAIL时,您必须启用不太安全的应用程序!