我试图弄清楚如何使用JWT为现有用户获取令牌ID或新令牌。目标是获取电子邮件和密码,在mongo数据库中找到它,然后将令牌发送回客户端,然后为会话存储令牌。
当前,当我注册时,我会加密密码并将电子邮件,名称和密码存储在mongoDB中。
根据我所学的内容,实际的令牌未存储在mongoDB中,但令牌是通过_id生成的,出于某种原因,我无法拉出该令牌以辞职并重新获得令牌,但没有运气。对于个人项目,任何建议都将不胜感激。
User.create({
name : req.body.name,
email : req.body.email,
password : req.body.password,
},
function (err, user) {
if (err) return res.status(500).send("There was a problem registering the user.")
// create a token
var token = jwt.sign({ id: user._id }, config.secret);
res.status(200).send({ auth: true, token: token });
});
答案 0 :(得分:1)
您可以尝试使用user._id.toString()
或user.id
代替user._id来检索用户ID。
您可能会从下面的代码中了解到一些如何使用JWT令牌进行验证的想法。
login: (req, res) => {
const { name, password } = req.body;
mongoose.connect(connUri, { useNewUrlParser: true }, (err) => {
let result = {};
let status = 200;
if(!err) {
User.findOne({name}, (err, user) => {
if (!err && user) {
// We could compare passwords in our model instead of below as well
bcrypt.compare(password, user.password).then(match => {
if (match) {
status = 200;
// Create a token
const payload = { user: user.name };
const options = { expiresIn: '2d', issuer: 'anshukumar.me' };
const secret = process.env.JWT_SECRET;
const token = jwt.sign(payload, secret, options);
// console.log('TOKEN', token);
result.token = token;
result.status = status;
result.result = user;
} else {
status = 401;
result.status = status;
result.error = `Authentication error`;
}
res.status(status).send(result);
}).catch(err => {
status = 500;
result.status = status;
result.error = err;
res.status(status).send(result);
});
} else {
status = 404;
result.status = status;
result.error = err;
res.status(status).send(result);
}
});
} else {
status = 500;
result.status = status;
result.error = err;
res.status(status).send(result);
}
});
}
您还可以检查此GitHub存储库,该存储库已在Node JS中实现了JWT令牌。 https://github.com/kumaranshu72/JWT-nodeJS
您还可以按照以下教程来了解如何实现JWT身份验证:https://scotch.io/tutorials/authenticate-a-node-es6-api-with-json-web-tokens
答案 1 :(得分:0)
我认为您无需_即可访问ID
User.create({
name : req.body.name,
email : req.body.email,
password : req.body.password,
},
function (err, user) {
if (err) return res.status(500).send("There was a problem registering the user.")
// create a token
var token = jwt.sign({ id: user.id }, config.secret);
res.status(200).send({ auth: true, token: token });
});
user.id而不是user._id