如何解决验证从服务器发送的 jwt 令牌是否与用户发回的 NodeJS 相同
我正在制作我的第一个 API,但对 jwt 令牌有点困惑。问题是,当用户登录应用程序时,我检查数据库中的数据,如果一切正确,我将用户 jwt 令牌发送回去,以便他们可以访问他们的个人信息,而无需每次都发送电子邮件和密码。但是我怎么知道令牌用户是否发回,是我发送给他们的令牌?当我将每个令牌发送给用户时,我是否应该将它们存储在我的服务器上,然后将它们与用户发送的令牌进行比较?处理此问题的最佳做法是什么?
解决方法
如果您将 MongoDB 与 mongoose 一起使用,您可以添加一个 Schema 方法来生成 jwt 并存储它,以及另一个检查该令牌的方法
const mongoose = require('mongoose');
const jwt = require('jsonwebtoken');
const UserSchema = new mongoose.Schema({
.....
})
UserSchema.methods.generateAuthToken = function () {
const user = this;
const token = jwt.sign({ email: user.email },process.env.JWT_SECRET).toString();
return token;
};
UserSchema.statics.findByToken = function (token) {
const user = this;
const decoded = jwt.verify(token,process.env.JWT_SECRET);
if (decoded.access === 'userEmail') {
return user.findOne({
email: decoded.email
});
} else {
return Promise.reject();
}
};
调用 user.generateAuthToken();验证后在您的控制器中
并在中间件中检查令牌
const { User } = require('path/to/model');
const authenticate = async (req,res,next) => {
try {
const token = req.headers.jwtToken;
const user = await User.findByToken(token);
if (!user) {
return Promise.reject();
}
req.user = user;
next();
} catch (err) {
return res.status(401).send(err);
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。