在我的用户控制器中,我创建一个令牌,当该用户登录到我的应用程序时,我将在其中保存该ID。
exports.findOne = (req, res) => {
User.findOne({
where: {
login: req.body.login,
},
})
.then(user => {
if (user) {
if (bcrypt.compareSync(req.body.password, user.password)) {
const token = jwt.sign(
{
id: user.id, // this is the id I need.
},
env.SECRET_KEY,
{
expiresIn: 129600,
},
);
return res.status(200).json({
message: 'Auth successful',
token,
});
}
...
}
})
.catch(err => {
res.status(400).json({ error: err });
});
};
现在在另一个控制器中,我想读取此ID并将其用于我的目的。我怎么去呢?
const loginId = '?'; // here I want to give it to id
Bill.update(
{
available_funds: available_funds - amountMoney,
},
{ where: { id_owner: loginId } },
).then(() => {
res.status(200).send(`ok`);
});
答案 0 :(得分:0)
制作一个中间件,该中间件在转发到更新路由之前会检查传入的令牌。 该中间件应负责验证登录后从客户端代码传递来的传入令牌(通常在cookie中存储令牌)。
现在,在中间件中,您可以执行以下操作:
app.use(function(req,res,next) {
JWT.verify(req.cookies['token'], 'YOUR_SECRET', function(err, decodedToken) {
if(err) { /* handle token err */ }
else {
req.userId = decodedToken.id; // Add to req object
next();
}
});
});
然后,最后在即将到来的控制器中,您可以从请求对象访问ID:
const loginId = req.userId;
Bill.update(
{
available_funds: available_funds - amountMoney,
},
{ where: { id_owner: loginId } },
).then(() => {
res.status(200).send(`ok`);
});