NodeJS - connect-keycloak 中间件空响应错误
NodeJS - connect-keycloak middleware empty response error
我在将 connect-keycloak 中间件与 NodeJS 一起使用时遇到了问题,而且网上似乎很少有使用过它的人提供的文档。这是基于此处官方文档的 'A Full Example':http://keycloak.github.io/keycloak-nodejs/connect/
我在使用 curl 进行测试时遇到意外错误,与未定义的 'keycloak-token' 有关。我在我的代码或源代码中找不到任何对此的引用,也找不到其他在线有相同问题的人。谁能看出我做错了什么?
connect-keycloak 对象已按预期包含并实例化:
// app.js:
// module dependencies
var request = require('sync-request');
var fs = require('fs');
var restify = require('restify');
var Keycloak = require('connect-keycloak');
var session = require('express-session');
var memoryStore = new session.MemoryStore();
// Keycloak
var keycloak = new Keycloak({ store: memoryStore });
并且使用了中间件:
var server = restify.createServer({
name: 'name',
version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(keycloak.middleware({ logout: '/logout', admin: '/' }));
server.use(session({
secret: 'secret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
并且keycloak.protect方法到位:
server.get(/.*/, keycloak.protect(), restify.serveStatic({
'directory': './html',
'default': 'index.html'
}));
然而这个卷曲测试:
curl -H "Content-Type: application/json" -X POST -d '{"query":"test"}' http://localhost:3000/trust-me-on-the-url-being-correct/thanks -i
产生这个不寻常的错误(不是我希望的错误):
POST -d '{"query":"car"}' http://localhost:3000/rest/keywords -i
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 87
Date: Thu, 03 Dec 2015 02:05:40 GMT
Connection: keep-alive
{"code":"InternalError","message":"Cannot read property 'keycloak-token' of undefined"}[addamnilemartin@localhost keyword]$
Keycloak.json 包含在与 app.js 相同的目录中,绝对不是问题的原因。
更新:
我意识到缺少这个并添加了它:
// set session for keycloak
server.use(session({
secret: 'fsd78d7gdfgds',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
现在当我的 POST 有 keycloak.protect() 错误时的响应是:
curl -H "Content-Type: application/json" -X POST -d '{"query":"car"}' http://localhost:3000/blah/blah -i
curl: (52) Empty reply from server
没有 keycloak.protect 响应是预期的 JSON,当然,因为没有尝试进行身份验证。
事实证明,这段代码没有任何问题。问题是我通过 npm 安装的节点模块已经过时,在这个中间件支持 bearer-only 身份验证之前已经过时了。
故事的寓意:让您的存储库保持最新!
我在将 connect-keycloak 中间件与 NodeJS 一起使用时遇到了问题,而且网上似乎很少有使用过它的人提供的文档。这是基于此处官方文档的 'A Full Example':http://keycloak.github.io/keycloak-nodejs/connect/
我在使用 curl 进行测试时遇到意外错误,与未定义的 'keycloak-token' 有关。我在我的代码或源代码中找不到任何对此的引用,也找不到其他在线有相同问题的人。谁能看出我做错了什么?
connect-keycloak 对象已按预期包含并实例化:
// app.js:
// module dependencies
var request = require('sync-request');
var fs = require('fs');
var restify = require('restify');
var Keycloak = require('connect-keycloak');
var session = require('express-session');
var memoryStore = new session.MemoryStore();
// Keycloak
var keycloak = new Keycloak({ store: memoryStore });
并且使用了中间件:
var server = restify.createServer({
name: 'name',
version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(keycloak.middleware({ logout: '/logout', admin: '/' }));
server.use(session({
secret: 'secret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
并且keycloak.protect方法到位:
server.get(/.*/, keycloak.protect(), restify.serveStatic({
'directory': './html',
'default': 'index.html'
}));
然而这个卷曲测试:
curl -H "Content-Type: application/json" -X POST -d '{"query":"test"}' http://localhost:3000/trust-me-on-the-url-being-correct/thanks -i
产生这个不寻常的错误(不是我希望的错误):
POST -d '{"query":"car"}' http://localhost:3000/rest/keywords -i
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 87
Date: Thu, 03 Dec 2015 02:05:40 GMT
Connection: keep-alive
{"code":"InternalError","message":"Cannot read property 'keycloak-token' of undefined"}[addamnilemartin@localhost keyword]$
Keycloak.json 包含在与 app.js 相同的目录中,绝对不是问题的原因。
更新:
我意识到缺少这个并添加了它:
// set session for keycloak
server.use(session({
secret: 'fsd78d7gdfgds',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
现在当我的 POST 有 keycloak.protect() 错误时的响应是:
curl -H "Content-Type: application/json" -X POST -d '{"query":"car"}' http://localhost:3000/blah/blah -i
curl: (52) Empty reply from server
没有 keycloak.protect 响应是预期的 JSON,当然,因为没有尝试进行身份验证。
事实证明,这段代码没有任何问题。问题是我通过 npm 安装的节点模块已经过时,在这个中间件支持 bearer-only 身份验证之前已经过时了。
故事的寓意:让您的存储库保持最新!