JWT 不适用于快速路由器
JWT not working with express router
我正在尝试为 express REST API 实施身份验证系统。
我从教程中获得了使用 jsonwebtoken 的代码。
我的身份验证中间件 verifyToken
不工作。请帮忙
var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var models = require('../models');
function verifyToken(req, res, next) {
var bearerHeader = req.headers['authorization'];
if (typeof bearerHeader !== undefined) {
} else {
res.sendStatus(403)
}
}
router.post('/tryjwt', verifyToken, (req, res, next) => {
res.send('It worked');
});
router.get('/login', function (req, res, next) {
const user = {
id: 1,
usename: 'ayoob',
email: 'ayoob@gmail.com'
}
jwt.sign({ user: user }, 'secretkey', (err, token) => {
res.json({ token: token })
});
});
module.exports = router;
当 if (typeof bearerHeader !== undefined)
为真时,您没有执行任何操作。
确保调用 next
以便当前中间件可以将控制传递给下一个中间件
将此代码片段放入 if 语句中
try{
const decode = jwt.verify(bearerHeader, 'secretkey')
//do something with the decode object
next()
}catch(err){
res.sendStatus(403)
}
我认为问题在于 jwt.sign() 函数的异步性质 - 它在继续执行您的代码时继续对令牌进行签名 - 返回一个空的 json。您需要等待 jwt.sign() 在 res.json({token}) 之前完成,或者在 jwt 的魔法发生时做一些事情。
希望我有所帮助:)
p.s。使用 promises 是更好的做法,这样你的代码会更清晰,你不会陷入回调地狱,并且可以更好地处理错误。
我正在尝试为 express REST API 实施身份验证系统。
我从教程中获得了使用 jsonwebtoken 的代码。
我的身份验证中间件 verifyToken
不工作。请帮忙
var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var models = require('../models');
function verifyToken(req, res, next) {
var bearerHeader = req.headers['authorization'];
if (typeof bearerHeader !== undefined) {
} else {
res.sendStatus(403)
}
}
router.post('/tryjwt', verifyToken, (req, res, next) => {
res.send('It worked');
});
router.get('/login', function (req, res, next) {
const user = {
id: 1,
usename: 'ayoob',
email: 'ayoob@gmail.com'
}
jwt.sign({ user: user }, 'secretkey', (err, token) => {
res.json({ token: token })
});
});
module.exports = router;
当 if (typeof bearerHeader !== undefined)
为真时,您没有执行任何操作。
确保调用 next
以便当前中间件可以将控制传递给下一个中间件
将此代码片段放入 if 语句中
try{
const decode = jwt.verify(bearerHeader, 'secretkey')
//do something with the decode object
next()
}catch(err){
res.sendStatus(403)
}
我认为问题在于 jwt.sign() 函数的异步性质 - 它在继续执行您的代码时继续对令牌进行签名 - 返回一个空的 json。您需要等待 jwt.sign() 在 res.json({token}) 之前完成,或者在 jwt 的魔法发生时做一些事情。
希望我有所帮助:)
p.s。使用 promises 是更好的做法,这样你的代码会更清晰,你不会陷入回调地狱,并且可以更好地处理错误。