首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >羽毛身份验证是否也需要对应用程序内部服务调用进行身份验证(以及如何解决)?

羽毛身份验证是否也需要对应用程序内部服务调用进行身份验证(以及如何解决)?
EN

Stack Overflow用户
提问于 2017-09-15 06:24:06
回答 1查看 620关注 0票数 0

我正在构建一个身份验证后的FeathersJS服务,它非常类似于FeathersJS演示聊天应用程序中的messages服务:https://github.com/feathersjs/feathers-chat/

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

这是我目前的方法:

代码语言:javascript
复制
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方法,它就会随机产生一个错误。

代码语言:javascript
复制
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,我如何才能以正确的方式存储消息?

多谢你们的支持!

EN

回答 1

Stack Overflow用户

发布于 2017-09-16 07:11:31

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

这可以通过在传递原始参数之前删除provider属性来避免,例如使用Lodash _.omit

代码语言:javascript
复制
myservice.find(_.omit(params, 'provider'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46229080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档