在您的 app.js 中,使用 express 的 app.use()在任何路由之前注册令牌身份验证中间件。
这样,每次调用 after 定义的路由时都会执行令牌认证。基本上 app.use(authentication) 和 app.use('*', authentication) 是一样的,这意味着中间件是针对所有域执行的,而不仅仅是 '/api'。
auth.js
module.exports = function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.param('token') || req.headers['x-access-token'];
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token, app.get('superSecret'), function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
};
app.js
var express = require("express");
var app = module.exports = express();
// put the middleware before any routes in app.use()
var authentication = require("./middleware/auth");
app.use(authentication);
var user = require('./controllers/user');
app.use('/api', user);
如果您希望仅对“/api”路由进行令牌检查,则仅针对该路由定义身份验证
app.use('/api', authentication, user);
app.use() 按给定顺序运行作为参数给出的函数。