![](/img/trans.png)
[英]How do you generate a live Swagger API page for your hosted Swagger API?
[英]How do you add an API key in Swagger
我嘗試了幾種方法來向Swagger添加基本的API密鑰授權(表達swagger)。 以下是我清單中的相關信息。
{
...
"main": "app.js",
"dependencies": {
"express": "^4.12.3",
"swagger-express-mw": "^0.1.0"
},
...
}
我相信我已經在YAML配置中注冊了安全性定義。
swagger: "2.0"
info:
...
# Set up security for the API
securityDefinitions:
defaultApiKey:
type: apiKey
in: header
name: defaultApiKey
security:
- defaultApiKey: []
要完成此配置,我想我只需要在SwaggerExpress.create()函數中注冊中間件。 下面是我目前的整個app.js。
'use strict';
var SwaggerExpress = require('swagger-express-mw');
var app = require('express')();
module.exports = app; // for testing
var config = {
appRoot: __dirname // required config
};
SwaggerExpress.create(config, function(err, swaggerExpress) {
if (err) { throw err; }
// Serve the Swagger documents and SwaggerUi
app.use(swaggerExpress.runner.swaggerTools.swaggerUi());
// Install security
app.use(swaggerExpress.swaggerSecurity({
defaultApiKey: function(req, def, scopes, callback) {
console.log("hit");
}
}));
// install middleware
swaggerExpress.register(app);
var port = process.env.PORT || 10010;
app.listen(port);
});
當我嘗試使用它時,我看到以下內容:
Error initializing middleware
TypeError: swaggerExpress.swaggerSecurity is not a function
我嘗試用幾種不同的方法配置此方法,但均未成功。 我是否在YAML中正確定義了API密鑰,如果可以,我該怎么做才能在我的app.js文件中注冊API密鑰處理程序?
有點晚了,但供以后參考。 使用swagger-express-mw,這是您可以做到的方式(它對我有用):
config: {
appRoot: __dirname,
swaggerSecurityHandlers: {
defaultApiKey: function(req, authOrSecDef, scopesOrApiKey, callback) {
// code here
}
}
}
我希望這對某人有幫助。
通過將YAML定義轉換為JSON格式並以這種方式加載API定義,我能夠解決此問題:
'use strict';
// [INIT PRE-SERVER REQUIREMENTS]
var fs = require('fs');
var os = require('os');
var https = require('https');
var swagger = require('swagger-tools');
var app = require('express')();
var db = require(/* db config path */);
var swaggerObject = require('./api/swagger/swagger.json');
// Configure non-Swagger related middleware and server components prior to Swagger middleware
swagger.initializeMiddleware(swaggerObject, function (middleware) {
// Intialize middleware
app.use(middleware.swaggerMetadata());
// Setup security handlers
app.use(middleware.swaggerSecurity({
api_key: function(req, def, scopes, callback) {
// API KEY LOGIC HERE
// IF SUCCESSFUL
callback();
}
});
// Route requests to appropriate controller
app.use(middleware.swaggerRouter({useStubs: true, controllers: './api/controllers'}));
// Setup documentation
app.use(middleware.swaggerUi());
// Start the server
var httpsServer = https.createServer({
// KEY INFO
}, app);
httpsServer.listen(443, function() {
console.log('Server created and listening for requests on port 443.');
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.