Express Feathers身份验证是否也要求对应用程序内部服务调用进行身份验证(以及如何绕过)?

Express Feathers身份验证是否也要求对应用程序内部服务调用进行身份验证(以及如何绕过)?,express,passport.js,feathersjs,Express,Passport.js,Feathersjs,我正在身份验证背后构建FeatherJS服务,与FeatherJS演示聊天应用程序中的messages服务非常相似: 此外,我还想定义一个事件侦听器,它应该将收到的消息存储到应用程序的消息服务中,并调用所有必要的钩子来通知客户端应用程序 以下是我目前的做法: module.exports = function () { const app = this; const Model = createModel(app); const paginate = app.get('paginat

我正在身份验证背后构建FeatherJS服务,与FeatherJS演示聊天应用程序中的messages服务非常相似:

此外,我还想定义一个事件侦听器,它应该将收到的消息存储到应用程序的消息服务中,并调用所有必要的钩子来通知客户端应用程序

以下是我目前的做法:

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的情况下,如何以正确的方式存储消息


谢谢你的支持

我不确定MyExternalMessageSender的功能,但在内部服务调用中默认跳过身份验证。如果是内部服务调用,则由设置的
params.provider
确定。因此,如果将
hook.params
从外部调用(其中
provider
通常设置为
rest
socketio
)传递到后续服务调用,将运行身份验证(因为它认为这是一个外部调用)

可以通过在传递原始参数之前删除
提供程序
属性来避免这种情况,例如:


谢谢,这让我们对钩子的工作原理有了更多的了解。只需将MyExternalMessageSender看作一个异步事件监听器,它有时会创建新消息。问题依然存在:当我启动应用程序时,有时一切正常,有时传入的消息没有存储在应用程序级别,并且会显示上面的未验证错误。重新启动应用程序有时有帮助,有时没有。有没有办法找到错误的原因?什么会导致身份验证被触发,尽管它不应该被触发?
myservice.find(_.omit(params, 'provider'))