gpt4 book ai didi

node.js - Nodejs - JSONWebToken 过期问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:36 31 4
gpt4 key购买 nike

我正在尝试使用 Json Web token (在 article 的帮助下)验证我的 nodejs api,但问题是 token 永远不会过期。

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var jwt = require('jsonwebtoken');




mongoose.connect('mongodb://localhost/gd');
var schema = mongoose.Schema;

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

var router = express.Router();

app.use('/api', router);

var userSchema = new schema({
username: String,
password: String
},{
collection: 'users'
});

var User = mongoose.model('User', userSchema);



router.post('/authenticate', function(req, res) {

User.findOne({
username: req.body.username
}, function(err, user) {

if (err) throw err;

if (!user) {
res.json({ success: false, message: 'Authentication failed. User not found.' });
} else if (user) {

if (user.password != req.body.password) {
res.json({ success: false, message: 'Authentication failed. Wrong password.' });
} else {

var token = jwt.sign(user, "secret", {
expiresIn: 60
});

res.json({
success: true,
message: 'Enjoy your token!',
token: token
});
}

}

});
});



router.use(function(req, res, next) {

var token = req.body.token || req.query.token || req.headers['x-access-token'];

if (token) {

jwt.verify(token, "secret", function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
req.decoded = decoded;
next();
}
});

} else {

return res.status(403).send({
success: false,
message: 'No token provided.'
});

}
});

router.get('/users', function(req, res) {
User.find({}, function(err, users) {
res.json(users);
});
});

var server = app.listen(3001, function () {
var host = server.address().address;
var port = server.address().port;

});

最佳答案

为了了解 token 的到期时间,jwt 在负载中添加了 exp 属性。但是,当您将负载传递给 jwt.sign 时,它是一个 mongoose 对象,它将(默默地)不允许您添加架构中未定义的属性。

解决方案应该是在将用户作为有效负载传递之前将其转换为普通对象:

var token = jwt.sign(user.toObject(), "secret", {
expiresIn: 60
});

关于node.js - Nodejs - JSONWebToken 过期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33276214/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com