gpt4 book ai didi

javascript - 在任何路由之前运行的中间件

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:21 26 4
gpt4 key购买 nike

我正在尝试进行基于 token 的身份验证。在任何请求发生之前,我都陷入了运行身份验证的困境。例如,下面的代码是获取用户,但是一个中间件应该检查​​请求是否具有有效的 token 。

app.js

var user = require('./controllers/user');
app.use('/api', user);

用户.js

var express = require('express');
var router = express.Router();

router.get('/user', function(req, res) {
User.find({}, function(err, users) {
res.json(users);
});
});

module.exports = router;

我的逻辑是 here ,但我不知道该把它放在哪里。

最佳答案

在您的 app.js 中,在任何路由之前使用express' app.use() 注册 token 身份验证中间件。

这样每次调用之后定义的路由时都会执行 token 认证。基本上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”路由进行 token 检查,则只需使用以下命令定义身份验证

app.use('/api', authentication, user);

app.use() 按给定顺序运行作为参数给出的函数。

关于javascript - 在任何路由之前运行的中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com