- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Keycloak是一个用 Java 编写的开源身份验证和身份管理解决方案。它提供了一个nodejs适配器,使用它我能够成功地与express集成。这是有效的路由文件:
'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);
};
正如您在交货单路由中所看到的,我有两个受 keycloak.protect()
保护的路由(同一路由的副本)。我正在尝试在 sails 中做同样的事情。为此,我有以下问题。
a.要将 keycloak 集成到 Express 中,需要执行以下操作来保护路由
需要 Keycloak 和快速 session :
var Keycloak = require('keycloak-connect');
var session = require('express-session');
定义用于存储 session 的内存存储:
var memoryStore = new session.MemoryStore();
将 session 作为中间件包含在express中
app.use( session ({
secret :'我的 secret ',
重新保存:假,
保存未初始化:true,
存储:内存存储
}));
启动Keycloak:
var keycloak = new Keycloak({
存储:内存存储
});
将 keycloak 中间件包含到 Express 中间件中:
app.use(keycloak.middleware({
注销: '/注销',
行政: '/'
}));
sử dụngkeycloak.protect()保护路由
app.route('/api/dos').get(keycloak.protect(),DeliveryOrderController.getAllDos).post(DeliveryOrderController.createDo);
我需要在 sails 中建立类似的步骤。我如何在 sails 中做这些事情?
我假设 http.js 是我添加中间件的地方。如果我这样做,如何访问routes.js中的keycloak以使用keycloak.protect()。
例如我可以通过以下方式添加保护功能:
'/foo': [
keycloak.protect(),
{ controller: 'user', action: 'find' }
]
这是 keycloak 的 Nodejs 适配器 - https://github.com/keycloak/keycloak-nodejs-connect
1 Câu trả lời
我终于找到了这个问题的答案。问题是 keycloak.middleware() 返回一个函数列表,而 app.use() 对此感到满意。Sails 获取 http.middleware 列表并将其添加到其中,并对结果列表调用 app.use。如果您只包含 keycloak.middleware(),您将获得一个包含函数数组的函数列表。 Express 会忽略该数组,因为它不是函数。
您需要将列表扩展为单独的函数。在http的顶部创建一个keycloak对象并初始化它。然后将其放在 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];
}
} khác {
newOrder.push(label);
}
};
module.exports.http.middleware.order = newOrder;
return "";
}
var result = init();
在 http.middleware 对象中您需要使用:keycloakMiddleware: keycloak.middleware(),并将其添加到订单数组中。
还添加一个策略来调用保护并包含以下内容:
var kc = sails.config.http.keycloak.protect();
return kc(req, resp, next);
如果您仍然需要解决这个问题,希望这对您有所帮助。
也许 Sails 应该在调用 Express 之前接受一个数组并展开它
关于node.js - 无法将 Keycloak 与 Sails 集成。能够将 Keycloak 与 Express 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45434714/
Tôi đang tìm hiểu tất cả các công nghệ cần thiết để xây dựng Ứng dụng trang đơn (SPA). Tóm lại, tôi muốn triển khai ứng dụng của mình dưới dạng các lớp riêng biệt, trong đó giao diện người dùng giao tiếp với giao diện quản trị chỉ bằng các dịch vụ web API (json qua socket.io). Phần đầu về cơ bản là
Khi tôi nhìn thấy ngày được lưu trữ trong cơ sở dữ liệu của mình. Đây là điều bình thường. Ngày tháng và thời gian chỉ có vậy. Nhưng khi tôi chạy yêu cầu get để lấy dữ liệu. Định dạng này khác với định dạng được lưu trữ trong cơ sở dữ liệu. Tại sao điều này lại xảy ra? Câu trả lời hay nhất tôi nghĩ bạn có thể
Hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời được hỗ trợ bởi các sự kiện, tài liệu tham khảo hoặc chuyên môn, nhưng câu hỏi này có thể gây ra tranh luận, tranh cãi, thăm dò ý kiến hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi đang cố gắng triển khai một số mã bằng backbone.js và hogan.js (http://twitter.github.com/hogan.js/) Hogan.js được phát triển
Tôi đang tạo một ứng dụng web bằng Backbone.js, Node.js và Express.js và tôi muốn thêm chức năng cho người dùng (đăng nhập, đăng xuất, hồ sơ, hiển thị nội dung liên quan đến người dùng). Tôi dự định sử dụng Passport
đóng cửa. Câu hỏi này cần được hỏi một cách tập trung hơn. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện điều này không? Cập nhật câu hỏi để tập trung vào một vấn đề duy nhất bằng cách chỉnh sửa bài đăng này. Đã đóng 8 năm trước. Cải thiện câu hỏi này
Tôi đang cố gắng tải dữ liệu trong NodeJS rồi chuyển nó sang ExpressJS để hiển thị biểu đồ d3 trên trình duyệt. Tôi biết tôi có thể tải dữ liệu theo cách này - https://github.com/mbostock/q
Trong node.js, tôi thấy có 3 tên tệp giống nhau để mô tả điểm vào chính của ứng dụng: Khi sử dụng gói express-generator, tệp app.js được tạo làm điểm vào chính cho ứng dụng được tạo. Bởi n
Gần đây tôi có cơ hội xem lớp học tuyệt vời của John Papa về cách xây dựng ứng dụng trang đơn. Tôi muốn nó. Nó liên quan đến mọi khía cạnh của ứng dụng phía máy chủ và phía máy khách. Tôi thích phía khách hàng hơn. Trong quá trình triển khai, ông Papa có lớp sau ở phía máy khách:
Hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời được hỗ trợ bởi các sự kiện, tài liệu tham khảo hoặc chuyên môn, nhưng câu hỏi này có thể gây ra tranh luận, tranh cãi, thăm dò ý kiến hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi là người mới học đồ họa và cần trợ giúp để hiểu chức năng của nhiều thư viện javascript 2D. . . Tôi nhận được gì từ Pixi.js mà tôi không nhận được từ các thư viện dựa trên Canvas như Konva? Tôi đến từ Konva
Tôi đang cố gắng xây dựng một số mã ÍT HƠN (thông qua ember-cli-less) vào một tệp CSS. 1) https://almsaeedstudio.com/ Tệp AdminLTE LESS 2) Bo
Đang cố gắng xem tất cả các phiên của tất cả người dùng đã đăng nhập trong Express Passport và hy vọng cũng có thể xem được người dùng hiện đang đăng nhập. Cách tốt nhất và nhanh nhất là gì? Tôi đang nghĩ có lẽ tôi có thể làm điều này khi đăng nhập và đưa cơ sở dữ liệu mô hình người dùng "trực tuyến"
Tôi có một ứng dụng React nhưng tôi cần chạy một số mã js phía máy khách sau khi một thành phần tải xong. Sau khi hàm render hoàn tất và được tải, cách tốt nhất để chạy js tương tác với DOM là gì, chẳng hạn như $('div').mixItUp() . Phải
Vui lòng cho tôi biết cách tải tệp lên máy chủ express.js phía máy khách bằng bodyparser.raw() // ... onFilePicked(file) { const url = 'upload/a
Tôi đang cố gắng di chuyển từ Grunt sang Gulp. Dự án chạy tốt trên Grunt, vậy nên có lẽ tôi đã làm sai điều gì đó trong Gulp. Mọi tác vụ khác đều hoạt động ngoại trừ tập lệnh. Tôi mệt mỏi khi phải thêm và chú thích các phần rồi. Tôi liên tục nhận được những điều bất ngờ
Tôi đang cố gắng đổi tên trang web của mình. Không tìm thấy nơi tôi có thể đặt tiêu đề hoặc tên ứng dụng. Câu trả lời hay nhất Bạn có thể tạo bất kỳ tệp nào trong thư mục config/, ví dụ config/app.js với nội dung sau: module.expor
Sau nhiều năm phát triển PHP/MySQL trên máy chủ, tôi đang cố gắng khám phá các công nghệ mới để xây dựng các ứng dụng web hiện đại. Tôi đang cố gắng sắp xếp tất cả nội dung JavaScript và nếu tôi hiểu rõ, một giải pháp hiệu quả có thể là phục vụ
Tôi mới làm quen với Nodejs. Tôi có app.js và index.js trong thư mục tuyến đường. Tôi có một ứng dụng.use(multer....). Tôi cũng đã định nghĩa app.post('filter-re
Tôi đang sử dụng mẫu Angular-seed để xây dựng ứng dụng của mình. Ban đầu, tôi đặt toàn bộ mã JavaScript của mình vào một tệp, main.js. Tệp này chứa khai báo mô-đun, bộ điều khiển, chỉ thị, bộ lọc và
Tôi là một lập trình viên xuất sắc, rất giỏi!