我有一个使用NodeJS运行的简单服务器应用程序,我尝试在this教程中实现路由保护,我已经拥有了每次登录时都能运行的令牌。
因此,除了register和login之外,应该调用所有路由的中间件。所以我在初始设置中做到了这一点:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var debug = require('debug')('express-sequelize');
var http = require('http');
var models = require('./models');
var jwt = require('jsonwebtoken');
var jwtPermission = require('./controller/jwtPermission');
var fotos = require('./routes/fotos');
var app = express();
var router = express.Router();
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/',require('./routes/index'));
app.use(jwtPermission);
app.use('/fotos',fotos);
未被调用的中间件是 jwtPermission 。所以我有一个路径文件夹,我有一个索引,以及身份验证文件(具有登录和注册)。对于jwtPermission,我只需要设置控制器,就像你们可以看到的那样。
我在控制器内部有一个console.log,但它永远不会被调用。
jwtPermission
var jwt = require('jsonwebtoken');
var jwtConfig = require('../config/jwt');
module.exports = function(req, res, next) {
console.log("entered");
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
console.log(req.headers['x-access-token']);
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token,jwtConfig.secret, 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.'
});
}
}
答案 0 :(得分:0)
您可以在Route
对象中配置路线,但必须将其附加到app
对象中。
因此,在这种情况下,请将route.use
更改为app.use
。
不需要使用路线对象。