Javascript 在node.js中使用jsonwebtokens进行身份验证
我正在使用jsonwebtoken生成用于验证用户的JSON WebToken,我已经完成了生成令牌的工作,但是每当我将令牌发送到服务器时,它不会得到验证,它总是以类型错误结束:jwt.verify不是一个函数请帮助了解如何验证令牌Javascript 在node.js中使用jsonwebtokens进行身份验证,javascript,node.js,express,jwt,Javascript,Node.js,Express,Jwt,我正在使用jsonwebtoken生成用于验证用户的JSON WebToken,我已经完成了生成令牌的工作,但是每当我将令牌发送到服务器时,它不会得到验证,它总是以类型错误结束:jwt.verify不是一个函数请帮助了解如何验证令牌 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var morgan = require('morgan'); var
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var moment = require('moment');
var jwt = require('jwt-simple'); // used to create, sign, and verify tokens
var config = require('./config'); // get our config file
var User = require('./models/users'); // get our mongoose model
var port = process.env.PORT || 8080; // used to create, sign, and verify tokens
mongoose.connect(config.database); // connect to database
app.set('superSecret', config.secret); // secret variable
// use body parser so we can get info from POST and/or URL parameters
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// use morgan to log requests to the console
app.use(morgan('dev'));
var router = express.Router();
router.post('/authenticate', function(req, res, next) {
console.log(req.body.name);
User.findOne({ name: req.body.name }, 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 {
// now create token here
var token = jwt.sign(user,app.get('superSecret'),{
expiresIn:1440
});
res.json({
success: true,
message: 'Enjoy your token!',
token: token
});
}
}
})
})
//decoding jwt
router.use(function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access- token'];
// decode token
if (token) {
// verifies secret and checks exp
var decode = jwt.verify(token, "jsonWebTokens", function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
});
router.get('/', function(req, res, next) {
res.send("hello and welcome to express routing");
})
router.get('/users', function(req, res, next) {
User.find({}, function(err, users) {
res.json(users);
// decode token
})
})
app.use('/api', router);
// basic route
app.get('/', function(req, res) {
res.send('Hello! The API is at http://localhost:' + port + '/api');
});
//for users
app.get('/setup', function(req, res) {
// create a sample user
var nick = new User({
name: 'Nick Cerminara',
password: 'password',
admin: true
});
// save the sample user
nick.save(function(err) {
if (err) throw err;
console.log('User saved successfully');
res.json({ success: true });
});
});
app.listen(port);
console.log('Magic happens at http://localhost:' + port);
我遵循了本教程var jwt=require('jwt-simple')代码>
您应该使用npm模块jsonwebtoken
。jwt simple
模块仅用于编码和解码jsonwebtoken
见:
它不提供那些签名
、创建
和验证
api
而模块jsonwebtoken确实提供了这些API
JsonWebToken:
为了解决这个问题
如果您还没有jsonwebtoken模块,请安装它<代码>npm安装jsonwebtoken
jwt
以导入jsonwebtoken<代码>var jwt=require('jsonwebtoken')代码>var jwt=require('jwt-simple')代码>
您应该使用npm模块jsonwebtoken
。jwt simple
模块仅用于编码和解码jsonwebtoken
见:
它不提供那些签名
、创建
和验证
api
而模块jsonwebtoken确实提供了这些API
JsonWebToken:
为了解决这个问题
如果您还没有jsonwebtoken模块,请安装它<代码>npm安装jsonwebtoken
jwt
以导入jsonwebtoken<代码>var jwt=require('jsonwebtoken')代码>让我知道这是否有效。如果没有,很高兴进一步查看。您是否运行了
npm i
来安装依赖项?您是否运行了npm i
来安装依赖项?@kisor我意识到您不接受该解决方案,只是检查建议的答案是否有任何错误。我完全接受你的ans。我也很感谢你。这很有效,但是没有更轻量级的软件包吗?根据进口成本,它是339.4KB(gzipped后为108.5kb)@kisor我意识到您不接受该解决方案,只是检查一下建议的答案是否有任何错误。我完全接受你的ans。我也很感谢你。这很有效,但是没有更轻量级的软件包吗?按进口成本计算,为339.4万亿(gzipped后为108.5万亿)