首页 > 解决方案 > 为什么 MongoDB 不保存我的用户(async/await 的问题?) - Express、mongoDB、Oauth

问题描述

我正在使用 Oauth 来允许我的用户使用他们的 google 帐户登录。我已经成功创建了一个检查电子邮件是否经过验证的函数,然后根据用户是否已经保存在数据库中,只需将用户发回 - 或者如果用户不存在,则创建一个新用户。

我的控制台显示消息“电子邮件已验证”和“未找到用户”,所以我知道它会进入代码的那部分 - 但它不会继续创建新用户。我的怀疑是这与异步等待有关,并且事情可能以错误的顺序发生。任何想法将不胜感激!

app.post("/googlelogin", (req, res) => {
  const { tokenId } = req.body

  client.verifyIdToken({
    idToken: tokenId, 
    audience: 'XXXX' // removed for demo
  })
    .then(async (response) => {
      const { email_verified, name, email } = response.payload
      console.log(response.payload)

      if (email_verified) {
        console.log('email is verified')

        try {
          const user = await User.findOne({ name, email })
            if (user) {
              console.log('User found!')
              return res.json({
                success: true,
                name: user.name,
                email: user.email,
                token: user.token,
                userID: user._id
              })
            } else {
              console.log('User not found!')
              let newUser = await new User({
                name, 
                email
              }).save()

              return res.json({
                success: true,
                name: newUser.name,
                email: newUser.email,
                token: newUser.token,
                userID: newUser._id
              })
            }
        } catch (error) {
            res.status(400).json({
              success: false,
              message: "Something went wrong",
              error
            })
        }
      } else {
          return res.status(400).json({
            success: false,
            error: "Email not verified",
          })
      }

  })
})

标签: mongodbexpressoauth

解决方案


解决了。

找到这个线程并按照提示删除我的收藏,然后它就起作用了!

MongoError:E11000 重复键错误集合:tracker-db.users 索引:username_1 重复键:{用户名:null}”


推荐阅读