JWT Webtoken 无法根据 req.params 进行验证
2022-08-13
160
我创建了一个电子邮件身份验证系统,但是我使用 jwt.verify 验证此令牌的方式似乎存在问题。
我认为我的 process.env.PASS_SEC 存在问题,这只是我的 Mongo.DB 密码密钥。这是正确的吗? 我可以确认,如果我执行 res.sent(req.params.token),我的令牌就会顺利通过,例如在这个例子中。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYyZjc0MWU3ZjBkZjZkY2IyZjM0ZDc3ZSIsImlhdCI6MTY2MDM3MTQzMSwiZXhwIjoxNjYwNjMwNjMxfQ.vFtdRzEH2_52Hdhxs84bk7RPdIRDIoZ6Rcd-zZoBhus
因此,我相信 SECRET 传递不正确。
我当前运行的代码是:
router.post("/register", async (req, res, EMAIL_SECRET) => {
const newUser = new User({
fullname: req.body.fullname,
email: req.body.email,
position: req.body.position,
username: req.body.fullname,
password: CryptoJS.AES.encrypt(
req.body.password,
process.env.PASS_SEC
).toString(),
});
const accessToken = jwt.sign(
{
id: newUser._id,
},
process.env.JWT_SEC,
{
expiresIn:"3d"
},
);
const url = `http://localhost:5000/api/auth/confirmation/${accessToken}`;
const mailOptions = {
from: '[email protected]',
to: req.body.email,
subject: 'Confirm Email',
html: `Please click this email to confirm your email: <a href="${url}">${url}</a>`
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
try {
const savedUser = await newUser.save();
res.status(201).json(savedUser);
} catch (err) {
res.status(500).json(err);
}
});
它发送代码正常,但似乎不正确,您如何创建 EMAIL_SECRET?
这就是我希望验证电子邮件。
//User Email Auth Login
//Not yet functioning
router.get('/confirmation/:token', async (req, res) => {
try {
//verify the token with the secret
const { _id: { _id } } = jwt.verify(req.params.token, process.env.PASS_SEC);
await models.User.update({ confirmed: true }, { where: { _id } });
} catch (e) {
res.send('This isnt working');
}
});
但是,我无法验证,秘密出了什么问题
1个回答
您使用
process.env.JWT_SEC
签署了令牌,您应该使用相同的密钥
verify
它:
const { _id } = jwt.verify(req.params.token, process.env.JWT_SEC);
此外,您应该能够使用
findByIdAndUpdate
更新您的
User
:
await User.findByIdAndUpdate(_id, { confirmed: true });
lpizzinidev
2022-08-13