Express Feathers身份验证是否也要求对应用程序内部服务调用进行身份验证(以及如何绕过)?
我正在身份验证背后构建FeatherJS服务,与FeatherJS演示聊天应用程序中的messages服务非常相似: 此外,我还想定义一个事件侦听器,它应该将收到的消息存储到应用程序的消息服务中,并调用所有必要的钩子来通知客户端应用程序 以下是我目前的做法: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
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'))