我主要利用Hapi框架来构建RESTful API。对于这个项目,我正在使用Express,但是为什么会发生这种情况我还是有些困惑。
当我使用Postman测试POST端点时,第一个请求很好,但是当我发出第二个请求时会出错。
Error: Can't set headers after they are sent.
路由处理程序的代码如下:
const login = (req, res) => {
const validation = authScema.loginPayload.validate(req.body)
if (validation.error) {
return res.status(400).send(validation.error.details[0].message)
}
const { email, password } = req.body
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.catch(error => {
// Handle Errors here.
if (error) {
return res.status(400).send('Invalid login details.')
}
})
firebase.auth().onAuthStateChanged(user => {
if (user) {
const userObject = {
email: user.email,
uid: user.uid
}
const token = jwt.sign(userObject, secret)
return res.status(200).send(token)
}
})
}
我不明白为什么重新发送标头,因为我在每个分支中都返回。它应该已经退出了功能,对吧?
答案 0 :(得分:0)
结果是,signInWithEmailAndPassword是一个使用户返回幸福道路的承诺
因此,以下是最终代码:
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(user => {
const userObject = {
email: user.email,
uid: user.uid
}
const token = jwt.sign(userObject, secret)
res.status(200).json({ token })
})
.catch(error => {
if (error) {
res.status(400).json({ message: 'Invalid login details.' })
}
})
在这种情况下,onOnAuthStateChanged
不是必需的。