所以我想将参数传递给中间件,但是我在某些方面苦苦挣扎。
我在路由的处理程序中具有该功能:
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。 ...)
我已经尝试将其修改为以下内容:
const auth = {
required: jwt({
secret: 'secret',
userProperty: 'payload',
getToken: getTokenFromHeaders(req, res, role),
}),
但是它说req和res没有定义。
有什么办法吗?
答案 0 :(得分:0)
get
方法接收一个路径和两个回调,其中第一个是中间件:
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)
};
答案 1 :(得分:0)
我认为:
1)发出请求
app.use('/users', required);
2)检查身份验证
const required = (req, res, next) => {
const auth = {
required: jwt({
secret: 'secret',
userProperty: 'payload',
getToken: getTokenFromHeaders(req),
}),
...
};
if (auth.required) next();
else // error
}
3)下一步
router.get('/users', userController.findAll);
4)userController.findAll
userController.findAll将发送带有已恢复参数(要求和要求)的响应