【问题标题】:Check Firestore Database boolean return value检查 Firestore 数据库布尔返回值
【发布时间】:2021-09-06 06:09:19
【问题描述】:

我正在从事与基于反应本机应用的用户管理相关的任务。在他们成功注册为用户后,我包含一个存储布尔值的数据,并将其命名为 emailVerifiedAccount(如果他们成功注册,这是存储的数据,如果他们点击电子邮件,则表明他们是否是经过验证的用户验证链接发送给他们)。在登录屏幕中,我想检查我在 onAuthStateChanged 中从 firestore 获得的布尔值,并且仅在我获得的 emailVerifiedAccount 返回 true 时将它们引导到索引屏幕。下面的代码是登录屏幕的authstatechanged。

    const onAuthStateChanged = (user) => {
        if (user) {
            checkEmailVerifiedAccount=firestoreService.isEmailVerifiedAccount(user);
            try {
                if(checkEmailVerifiedAccount===true){
                    navigation.navigate('Index');
                }else{
                    Alert.alert(
                        "Verify as a Playbookx user",
                        "Please click on email verification link send to your email. If you do not receive any email ,please contact user support",
                        "You may come back to login again after you verified your email",
                        [
                          { text: "OK"}
                        ]
                      )
                }
            } catch (error) {
                console.log(error);
            }
        }
    };

在 firestore.js 中是与 Firestore 数据库相关的所有代码和函数。 isEmailVerifiedAccount 是使用电子邮件检查已验证用户的类对象之一。

isEmailVerifiedAccount = async (user) => {

return await firestore()
    .collection('users')
    .doc(user)
    .get()
    .then(snapshot => {
        if (snapshot.exists){
            const user=snapshot.data();
            const emailVerifiedAccount={
                emailVerifiedAccount:user.emailVerifiedAccount
            };
            return emailVerifiedAccount
        }
    })
    .catch(error => {
            console.log(error);
    });
};

我现在面临的问题是,当 Firestore 中的 emailVerifiedAccount 为 false 时,它​​会引导我进入索引屏幕。下图是 Firestore 的结构。

【问题讨论】:

    标签: javascript firebase react-native google-cloud-firestore


    【解决方案1】:

    你的 isEmailVerifiedAccount 函数是异步的,所以调用它时你必须 await 结果:

    checkEmailVerifiedAccount = await firestoreService.isEmailVerifiedAccount(user);
    

    【讨论】:

    • 嗨弗兰克,但如果我在 onAuthStateChanged 中写 await 它会给我一个语法错误,说“意外的保留工作'等待'”。抱歉有点新反应原生和火力基地。
    • 您需要将此方法标记为async:const onAuthStateChanged = async (user) => {。我强烈推荐阅读 async and await 的工作,以及为什么他们总是在一起。
    【解决方案2】:
    const checkEmailVerifiedAccount = firestoreService.isEmailVerifiedAccount(user);
    

    checkEmailVerifiedAcccount 似乎是一个对象,但您正在检查它是否等于true。要么直接从 isEmailVerifiedAccount 函数返回 user.emailVerifiedAccount,要么像这样读取该属性:

    const checkEmailVerifiedAccount = firestoreService.isEmailVerifiedAccount(user);
    
    if(checkEmailVerifiedAccount.emailVerifiedAccount) {
      navigation.navigate('Index');
    }
    

    【讨论】:

    • 嗨@Dharmaraj,即使通过firestore中的emailVerifiedAccount,你给我的代码似乎也进入了索引屏幕。
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多