Node.js 无法将Keyclope与帆集成。能够将KeyClope与Express集成
是一个用Java编写的开源身份验证和身份管理解决方案。它提供了一个nodejs适配器,我可以使用它成功地与express集成。以下是有效的路由文件:Node.js 无法将Keyclope与帆集成。能够将KeyClope与Express集成,node.js,sails.js,keycloak,sails-mongo,Node.js,Sails.js,Keycloak,Sails Mongo,是一个用Java编写的开源身份验证和身份管理解决方案。它提供了一个nodejs适配器,我可以使用它成功地与express集成。以下是有效的路由文件: 'use strict'; module.exports = function(app) { var Keycloak = require('keycloak-connect'); var session = require('express-session'); var memoryStore = new s
'use strict';
module.exports = function(app) {
var Keycloak = require('keycloak-connect');
var session = require('express-session');
var memoryStore = new session.MemoryStore();
app.use(session({
secret: 'mySecret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
var keycloak = new Keycloak({
store: memoryStore
});
app.use(keycloak.middleware({
logout: '/logout',
admin: '/'
}));
// var lRController = require('../controllers/LRController');
//
// app.route('/lrs').get(lRController.list_all_lrs).post(lRController.create_a_lr);
var DeliveryOrderController = require('../controllers/DeliveryOrderController');
app.route('/').get(keycloak.protect(), DeliveryOrderController.getAllDos)
app.route('/api/dos').get(keycloak.protect(), DeliveryOrderController.getAllDos).post(DeliveryOrderController.createDo);
app.route('/api/do').put(DeliveryOrderController.updateDo);
app.route('/api/do/:doNumber').get(DeliveryOrderController.getDoByDoNumber);
app.route('/api/do/location/:locationId').get(DeliveryOrderController.getDoByLocation);
app.route('/api/do/branch/:branchId').get(DeliveryOrderController.getDoByBranch);
app.route('/api/do').delete(DeliveryOrderController.deleteDo);
var TransportDeliveryOrderController = require('../controllers/TransportDeliveryOrderController');
app.route('/api/tdos').get(TransportDeliveryOrderController.getAllTdos).post(TransportDeliveryOrderController.createTdo);
app.route('/api/tdo').put(TransportDeliveryOrderController.updateTdo);
app.route('/api/tdo/:tdoNumber').get(TransportDeliveryOrderController.getTdoByTdoNumber);
app.route('/api/tdo/status/:status').get(TransportDeliveryOrderController.getTdoByStatus);
app.route('/api/tdo/status/:status/do/:doNumber').get(TransportDeliveryOrderController.getTdoByStatusAndDo);
};
正如您在交货订单路由中所看到的,我有两条路由(同一路由的副本)受keybeapt.protect()
保护。我正试图在帆船上做同样的事情。为此,我有以下问题
a。要将KeyClope集成到express中,需要执行以下操作来保护路由
var-keydove=require('keydove-connect')代码>
var session=require('express-session')代码>
var memoryStore=new session.memoryStore()代码>
app.use(会话)({
秘密:“我的秘密”,
resave:false,
saveUninitialized:true,
商店:memoryStore
}));代码>
var-keydove=新的keydove({
商店:memoryStore
});代码>
app.use(keydape.com)({
注销:'/logout',
管理员:'/'
}));代码>
keydeport.Protect()保护路由
app.route('/api/dos').get(keydape.protect(),DeliveryOrderController.getAllDos).post(DeliveryOrderController.createDo)代码>
'/foo': [
keycloak.protect(),
{ controller: 'user', action: 'find' }
]
这是KeyClope的nodejs适配器-我终于找到了答案。 问题是keydropage.middleware()返回函数列表,而app.use()对此很满意。 Sails获取http.middleware列表并添加到其中,然后在结果列表上调用app.use。如果只包含keydropeat.middleware(),则会有一个包含函数数组的函数列表。Express忽略数组,因为它不是函数 您需要将列表扩展为单独的函数。在http的顶部创建一个KeyClope对象并初始化它。 然后将其放在config/http.js文件的底部:
function expandList() {
var newOrder = [];
for (let i in module.exports.http.middleware.order)
{
var label = module.exports.http.middleware.order[i];
var functor = module.exports.http.middleware[label];
if (functor && functor.constructor === Array) {
for (let j in functor) {
let newlabel = label + "." + j;
newOrder.push(newlabel);
module.exports.http.middleware[newlabel] = functor[j];
}
} else {
newOrder.push(label);
}
};
module.exports.http.middleware.order = newOrder;
return "";
}
var result = init();
在您需要使用的http.middleware对象内部:
KeyClope中间件:KeyClope.middleware(),
并将其添加到订单数组中
还添加了呼叫保护策略,包括:
var kc = sails.config.http.keycloak.protect();
return kc(req, resp, next);
如果你仍然需要解决这个问题,希望这对你有所帮助
也许Sails应该在调用Express之前接受一个数组并将其展开,我终于找到了答案。 问题是keydropage.middleware()返回函数列表,而app.use()对此很满意。 Sails获取http.middleware列表并添加到其中,然后在结果列表上调用app.use。如果只包含keydropeat.middleware(),则会有一个包含函数数组的函数列表。Express忽略数组,因为它不是函数 您需要将列表扩展为单独的函数。在http的顶部创建一个KeyClope对象并初始化它。 然后将其放在config/http.js文件的底部:
function expandList() {
var newOrder = [];
for (let i in module.exports.http.middleware.order)
{
var label = module.exports.http.middleware.order[i];
var functor = module.exports.http.middleware[label];
if (functor && functor.constructor === Array) {
for (let j in functor) {
let newlabel = label + "." + j;
newOrder.push(newlabel);
module.exports.http.middleware[newlabel] = functor[j];
}
} else {
newOrder.push(label);
}
};
module.exports.http.middleware.order = newOrder;
return "";
}
var result = init();
在您需要使用的http.middleware对象内部:
KeyClope中间件:KeyClope.middleware(),
并将其添加到订单数组中
还添加一个策略来调用protect并包括以下内容:
var kc = sails.config.http.keycloak.protect();
return kc(req, resp, next);
如果你仍然需要解决这个问题,希望这对你有所帮助
也许Sails应该在调用Express之前接受一个数组并将其展开上述答案不适用于Sails 1.0。现在,它要求中间件是一个函数,而不是一个数组,并且keydove从keydove.middleware返回一个数组。 以下是似乎有效的方法: 创建一个服务:keydeposervice
var session=require('express-session');
var keydove=require('keydove-connect');
var memoryStore=new session.memoryStore();
var keydeposeconfig={
“领域”:“某个领域,
“身份验证服务器url”:https://server.com/auth",
“资源”:“某些资源,
};
module.exports={
config:keydeposeconfig,
setConfig:function(配置){
返回新的keydape({store:memoryStore},config);
}
}
上述答案不适用于Sails 1.0。现在,它要求中间件是一个函数,而不是一个数组,并且keydove从keydove.middleware返回一个数组。
以下是似乎有效的方法:
创建一个服务:keydeposervice
var session=require('express-session');
var keydove=require('keydove-connect');
var memoryStore=new session.memoryStore();
var keydeposeconfig={
“领域”:“某个领域,
“身份验证服务器url”:https://server.com/auth",
“资源”:“某些资源,
};
module.exports={
config:keydeposeconfig,
setConfig:function(配置){
返回新的keydape({store:memoryStore},config);
}
}
还有一个注意事项:您可以有一个函数在中间件列表上迭代,并让sail调用该函数。这可以包含在keydove连接库中。如何在sails中使用keydove.enforcer?它必须在哪里使用?有什么例子吗?谢谢,还有一个注意事项:您可以有一个在中间件列表上迭代的函数,并让Sails调用该函数。这可以包含在keydove连接库中。如何在sails中使用keydove.enforcer?它必须在哪里使用?有什么例子吗?非常感谢。