【发布时间】:2018-10-23 20:47:36
【问题描述】:
我的 nodejs 中有一个登录方法,它在成功登录后使用用户信息(例如电子邮件和密码)响应前端(reactjs)。现在我也实现了 JWT。所以登录后,节点也会向客户端发送令牌。但我不知道该怎么做。如何同时发送两个响应?它只是发送用户信息。
节点:
server.js
app.post('/signin', (req, res) => { signin.handleSignin(req, res, db, bcrypt, jwt)});
signin.js
const handleSignin = (req, res, db, bcrypt, jwt) => {
const {
email,
password
} = req.body;
if (!email || !password) {
return res.status(400).json('Incorrect form submission');
}
db.select('email', 'hash').from('login')
.where('email', '=', email)
.then(data => {
const isValid = bcrypt.compareSync(password, data[0].hash);
if (isValid) {
return db.select('*').from('users')
.where('email', '=', email)
.then(user => {
jwt.sign({
user
}, 'secretkey', {
expiresIn: '1000s'
}, (err, token) => {
res.json(user[0]);
res.send({
token
})
})
})
.catch(err => res.status(400).json('unable to get user'))
} else {
res.status(400).json('wrong credentials')
}
})
.catch(err => res.status(400).json('wrong credentials'))
}
module.exports = {
handleSignin: handleSignin
}
【问题讨论】:
-
这看起来像是一个无效的代码。可以发minimal reproducible example吗?
-
将两个响应合二为一。一个请求 -> 一个响应。
-
@PraveenKumar 请查看我更新的帖子。
-
您不能在任何编程语言中多次发送响应,而只能使用 NodeJS,您可以结合
res.json({user: user[0], token: token}) -
您显然必须使前端代码适应新的响应。不过这很简单 - 只需获取您在那里收到的适当对象的属性
标签: javascript node.js jwt