我是节点上的新手,我有一个带 express 的 rest api,一些端点使用 keycloak-connect 具有 keycloak 安全性。发生错误 403 时,我需要自定义响应,即 json 格式的自定义消息。我使用处理程序来管理其他一些状态,例如 200、201、204、404、500,但是当 keycloak 抛出 403 时我无法工作。
var memoryStore = new session.MemoryStore();
app.use(session({
secret: 'my-secret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
var keycloak = new Keycloak({
store: memoryStore
});
app.use(keycloak.middleware());
// keycloak security
app.get('/service/secured', keycloak.protect('realm:user'), function (req, res) {
res.json({message: 'secured'});
});
app.get('/service/admin', keycloak.protect('realm:admin'), function (req, res) {
res.json({message: 'admin'});
});
// 404 handler and pass to error handler
app.use((req, res, next) => {
next(createError(404, 'Not found'));
});
// Error Handler
app.use((err, req, res, next) => {
// This log never is printed when 403 ocurrs
console.log('Error: ', err);
res.status(err.status || 500);
res.send({
error : {
status : err.status || 500,
message : err.message
}
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server starter on port ${PORT}`);
});