所以我想将一个参数传递给中间件,但我在某些方面苦苦挣扎。
我在路由处理程序中有这个功能:
router.get('/users', auth.required, userController.findAll);
然后它将转到调用getTokenFromHeaders
的auth函数:
const auth = {
required: jwt({
secret: 'secret',
userProperty: 'payload',
getToken: getTokenFromHeaders,
}),
...
};
在getTokenFromHeaders
函数中,检索并检查令牌,它看起来像这样:
const getTokenFromHeaders = (req) => {
...
return token; // Or null in case it's not there or incorrect
所以我的目标是传递一个像auth.required('role')
这样的参数来检查用户在getTokenFromHeaders
函数中的角色(定义更多的auth函数也可以(auth.admin,auth.whatever,...)
我已经尝试修改它如下:
const auth = {
required: jwt({
secret: 'secret',
userProperty: 'payload',
getToken: getTokenFromHeaders(req, res, role),
}),
但它说req和res没有定义。
有没有办法做到这一点?
get
方法接收一个路径和2个回调,其中第一个是中间件:
router.get('/users', auth, userController.findAll);
中间件就像findAll
函数一样,在执行之前执行:
var auth = function (req, res) {
// Get token from header (http://expressjs.com/en/api.html#req.get)
var token = req.get("myToken");
// TODO Validate token:
var isValid = someFunction(token);
if (!isValid) {
// ************
// TODO Check if user can access this resource
// ************
res.json("not authorized");
}
// Go to findAll (next callback)
};
我建议你看看qazxsw poi,特别是在qazxsw poi,以更好地了解中间件如何在express中工作。