我使用 express-jwt
进行身份验证,以下是我的代码:
api>routes/index.js
:
var express = require('express');
var router = express.Router();
var jwt = require('express-jwt');
var auth = jwt({ secret: 'thisIsSecret', requestProperty: 'auth' });
当我在
中使用auth
中间件时,在 index.js
内
router.post('/locations/:locationId/reviews', auth, ctrlReviews.reviewsCreate);
路由,当想用 postman 发布评论数据时,请求进入加载状态,并且没有响应出现,但如果从路由请求中删除 auth
则会给出响应。
我也检查过
var auth = jwt({
secret: process.env.JWT_SECRET,
userProperty: 'payload'
});
最佳答案
正如评论中提到的,您正在尝试处理有效和无效的 token 。这应该可以通过类似于下面的代码的方式实现。
如果您使用 Postman 使用以下 header 调用此函数,那么您将收到 200 OK,并显示一条消息“OK!”。
Authorization: Bearer validJWT
如果您使用 Postman 在没有有效 JWT 的情况下调用此方法,那么您将收到 401 Unauthorized 消息,并显示“无效 token ...”消息。
var jsonwebtoken = require('jsonwebtoken');
var express = require('express');
var app = express();
var jwt = require('express-jwt');
var auth = jwt({ secret: 'thisIsSecret', requestProperty: 'auth'});
// Generate valid JWT
console.log(jsonwebtoken.sign({ foo: 'bar' }, 'thisIsSecret'));
app.post('/locations/:locationId/reviews', auth, function(req, res, next) {
// Log user details set in JWT
console.log(req.auth)
res.send('OK!');
});
// Handle invalid JWT
app.use(function(err, req, res, next) {
if (err.constructor.name === 'UnauthorizedError') {
res.status(401).send('invalid token...');
}
});
app.listen(3000, function() {
console.log('Server running on 3000')
})
关于javascript - express-jwt 身份验证中间件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977650/