问题描述
我正在尝试为我的API添加安全性。我已经使用node.js创建了API,并使用了express和swagger-ui-express模块。问题是任何人都可以访问该端点。因此,为解决此问题,我想在显示大量内容之前添加一个基本的身份验证。
在端点上实现基本身份验证的示例:
app.get('/users',(req,res) => {
let user = auth(req)
if (user === undefined || user['name'] !== 'admin' || user['pass'] !== 'adminpass') {
res.statusCode = 401
res.setHeader('WWW-Authenticate','Basic realm="Node"')
res.end('Unauthorized')
} else {
res.status(200).send('Return all users');
}
});
我想在swagger的端点中添加相同的示例:
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const swaggerDocument = YAML.load('./swagger.yaml');
const swaggerOptions = {
swaggerDeFinition: {
info: {
version: "1.0.0",title: "Customer API",description: "Customer API information",contact: {
name: "Amazing Developer"
},servers: ["http://localhost:3000"]
}
},// ['.routes/*.js']
apis: ["index.js"]
};
const swaggerDocs = swaggerJsDoc(swaggerOptions);
app.use('/api-docs',swaggerUi.serve,swaggerUi.setup(swaggerDocument));
有人可以帮助我吗?我试图这样做,但是没有用。我什至不知道是否可能。
解决方案:
app.use('/api-docs',function(req,res,next){
let user = auth(req)
if (user === undefined || user['name'] !== 'admin' || user['pass'] !== 'adminpass') {
res.statusCode = 401
res.setHeader('WWW-Authenticate','Basic realm="Node"')
res.end('Unauthorized')
} else {
next();
}
},swaggerUi.setup(swaggerDocument));
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)