mongodb - 为什么 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",
})
}
})
})
解决方案
解决了。
找到这个线程并按照提示删除我的收藏,然后它就起作用了!
MongoError:E11000 重复键错误集合:tracker-db.users 索引:username_1 重复键:{用户名:null}”
推荐阅读
- php - 尝试使用 mysqli 在 PHP 7.3 中启动事务时出现致命错误
- node.js - 节点 multer 使用邮递员发布表单数据 - 未收到任何正文
- android - 材料设计中的 MaterialButton 阴影
- hibernate - 将 SQL 转换为 JPA 规范
- flutter - dartfmt vs dart 格式 vs 颤振格式
- sql-server - 通过 Direct Query 连接到 Azure 专用 SQL 池的 Power BI 报表性能缓慢
- android - 需要有关文本视图、对话框、布尔语句和切换案例的帮助
- sql-server - 将存储过程结果传递给文本框
- html - 为什么我的页脚中没有显示背景?
- gtk - 失败:utils/pango-view.1 在编译 gnome-shell 时