如何修复javascript中的“TypeError:无法读取未定义的属性“keycloak-token”错误?

use*_*762 8 javascript node.js keycloak

我正在尝试在我的节点项目中使用 keycloak,但我总是收到以下消息:无法读取未定义的属性“keycloak-token”。

在此之前,我已经启动了 keycloak,我创建了一个新领域“Test”和一个新用户“id_a”,我为它设置了一个新密码。我可以使用 keycloak 访问该帐户,但无法使用我的代码。你能帮我么 ?

var session = require('express-session');
var Keycloak = require('keycloak-connect');
const express = require('express');

var memoryStore = new session.MemoryStore();

let kcConfig = {
  clientId: "id_a",
  bearerOnly: true,
  serverUrl: 'http://localhost:8080/auth',
  realm: 'Test'
};

let keycloak = new Keycloak({ store: memoryStore }, kcConfig);

var app = express();

app.use( keycloak.middleware() );

app.get( '/complain', keycloak.protect(), function(req, res) {
  res.send('hello world');
});

app.listen(3001, function(){
  console.log('Server started on port 3001...')
});
Run Code Online (Sandbox Code Playgroud)

输出是:'TypeError:无法读取未定义的属性'keycloak-token',我希望你好世界

Cai*_*tro 21

我有同样的问题,但现在它正在工作。您需要在运行 keycloak 中间件之前实例化一个会话。缺失的一段代码如下:

// Create a session-store to be used by both the express-session
// middleware and the keycloak middleware.

var memoryStore = new session.MemoryStore();

app.use(session({
  secret: 'some secret',
  resave: false,
  saveUninitialized: true,
  store: memoryStore
}));

// Provide the session store to the Keycloak so that sessions
// can be invalidated from the Keycloak console callback.
//
// Additional configuration is read from keycloak.json file
// installed from the Keycloak web console.

var keycloak = new Keycloak({
  store: memoryStore
});

app.use(keycloak.middleware({
  logout: '/logout',
  admin: '/'
}));
Run Code Online (Sandbox Code Playgroud)

查看 nodeJS 的 keycloak 快速入门以获取完整代码参考:https : //github.com/keycloak/keycloak-quickstarts/blob/latest/service-nodejs/app.js


小智 5

该客户端不是带有密码的用户帐户,而是您创建的测试领域中的客户端。创建一个新客户端,将客户端 ID 设置为“node-backend”之类的内容,然后将 kConfig clientId 配置为“node-backend”。

客户端是应用程序,例如 Node 或 Angular。

  • 当我不传入授权标头时,我在公共端点上收到此错误。这是公共端点的预期行为吗? (2认同)