我在使用带有NodeJS的connect-keycloak中间件时遇到了问题,并且使用它的人在网上的文档似乎很少.这是基于以下官方文档中的"完整示例":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,当然,因为没有尝试认证.