我正在构建一个身份验证后的FeathersJS服务,它非常类似于FeathersJS演示聊天应用程序中的messages服务:https://github.com/feathersjs/feathers-chat/
此外,我还想定义一个事件侦听器,它应该将接收到的消息存储到应用程序的消息服务中,并调用所有必要的钩子来通知客户端应用程序。
这是我目前的方法:
module.exports = function () {
const app = this;
const Model = createModel(app);
const paginate = app.get('paginate');
const options = {
name: 'messages',
Model,
paginate
};
app.use('/messages', createService(options));
const service = app.service('messages');
service.hooks(hooks);
const sender = new MyExternalMessageSender();
sender.on('message', (msg) => {
service.create(msg, {user: {_id: 0}}).then(result => console.log(result));
});
if (service.filter) {
service.filter(filters);
}
};这有时工作得很好,有时只要通知MyExternalMessageSender并尝试调用消息服务的create方法,它就会随机产生一个错误。
NotAuthenticated: No auth token
at Error.NotAuthenticated (projects\feathers-chat\node_modules\feathers-errors\lib\index.js:100:17)
at projects\feathers-chat\node_modules\feathers-authentication\lib\hooks\authenticate.js:102:31如果我的应用程序本身不需要使用JWT,我如何才能以正确的方式存储消息?
多谢你们的支持!
发布于 2017-09-16 07:11:31
我不确定MyExternalMessageSender做了什么,但是在内部服务调用中默认跳过身份验证。如果是内部服务呼叫,则由设置的params.provider确定。因此,如果将hook.params从外部调用(其中provider通常设置为rest或socketio)传递给后续服务调用,则将运行身份验证(因为它认为这是一个外部调用)。
这可以通过在传递原始参数之前删除provider属性来避免,例如使用Lodash _.omit
myservice.find(_.omit(params, 'provider'))https://stackoverflow.com/questions/46229080
复制相似问题