【发布时间】:2021-06-15 19:04:45
【问题描述】:
我正在使用 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",
})
}
})
})
【问题讨论】:
-
将你的异步函数分别写在 then 块中,然后等待它。
-
你得到了什么 JSON 响应?