我对使用Nodejs并不陌生,但是我承认我很喜欢,我正在使用令牌Jwt来对用户进行身份验证,这很简单,他们登录并赢得了令牌。但是我想在路由上设置权限,我一直在阅读有关express-jwt-permissions的信息,但是在我的应用程序中使用它时,POSTMAN出现了以下错误:UnauthorizedError:未找到用户对象“ user”。检查您的配置。
customerRoutes.js
const router = require('express').Router();
var jwt = require('jsonwebtoken');
var guard = require('express-jwt-permissions')()
const customerController = require('../controllers/customerController');
function verifyToken(req, res, next) {
// Get auth header value
const bearerHeader = req.headers['authorization'];
// Check if bearer is undefined
if(typeof bearerHeader !== 'undefined') {
// Split at the space
const bearer = bearerHeader.split(' ');
// Get token from array
const bearerToken = bearer[1];
// Set the token
req.token = bearerToken;
// Next middleware
next();
} else {
// Forbidden
res.sendStatus(403);
}
}
router.post('/posts',verifyToken,guard.check('admin'),
customerController.posts);
module.exports = router;
这是我的令牌的外观:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwZXJtaXNzaW9ucyI6WyJhZG1pbiJdLCJpYXQiOjE1Mzc0MDgZNZMZ3K2Z1Z3Z3Z2Z3Z3K3Y3C3C3D3C3C3D3C3C3C3D0C0
答案 0 :(得分:0)
摘自express-jwt-permissions
此中间件假定您已经具有JWT身份验证中间件,例如express-jwt。
然后使用第一个示例查找express-jwt
文档:
var jwt = require('express-jwt');
app.get('/protected',
jwt({secret: 'shhhhhhared-secret'}),
function(req, res) {
if (!req.user.admin) return res.sendStatus(401);
res.sendStatus(200);
});
与您遇到的错误相关联,可以肯定地说express-jwt-permissions
中间件期望一个对象值填充req.user
字段(然后我实际上检查了它们的源代码https://github.com/MichielDeMey/express-jwt-permissions/blob/master/index.js#L11并证明是事实。
因此,我的建议是使用express-jwt
来为您工作并已知可以与express-jwt-permissions
一起使用,或者在req.user
中间件中填充verifyToken
对象自己(需要解码JWT),例如:
// decode JWT
// get decoded token.permissions
req.user = {
permissions: token.permissions
};
在调用next()
到下一个中间件之前。
请注意,您还可以调整express-jwt-permissions
以期望与user
不同的字段(但仍需要位于快速中间件生命周期的req
名称空间中),以及与令牌有效载荷内的permissions
字段不同的名称。有关详情,请参见https://www.npmjs.com/package/express-jwt-permissions#configuration。但无论哪种方式,最重要的是您需要先对令牌进行解码。