【问题标题】:NodeJS - connect-keycloak middleware empty response errorNodeJS - connect-keycloak 中间件空响应错误
【发布时间】:2015-12-03 02:12:37
【问题描述】:

我在使用带有 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,因为不会尝试进行身份验证。

【问题讨论】:

    标签: node.js oauth-2.0 connect middleware keycloak


    【解决方案1】:

    事实证明,这段代码没有任何问题。问题是我通过 npm 安装的节点模块已经过时了,在这个中间件支持仅承载身份验证之前。

    故事的寓意:让您的存储库保持最新

    【讨论】:

    • 您的代码看起来如何?所有东西都在同一个班级吗?我真的坚持这一点,谢谢
    • @User24231 您是否使用上面链接中显示的 connect-keycloak npm 包(版本 0.0.16)?如果是这样,请切换到更新 keycloak-connect(版本 0.0.17)here。上个版本出现问题,导致npm包与Git上更新的版本不匹配,导致出现上述错误。
    • 是的,我正在使用最新版本。这实际上是我的 server/boot/root.js 文件
    • 是的,但还是没有运气:(我刚刚发布了这个,有什么想法吗?stackoverflow.com/questions/37056089/…
    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2013-09-28
    • 2015-12-04
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多