【问题标题】:Global Feathers hooks and event filters全局羽毛钩子和事件过滤器
【发布时间】:2019-07-24 11:46:30
【问题描述】:

在 Express 中,很容易阻止对以 /admin 前缀开头的所有路由的访问,只需在该路径下添加任何特定端点的处理程序之前向该路径添加一个中间件即可。

在 Feathers 中,看起来我们必须创建一些通用的钩子模块,并将它们单独添加到我们创建的每个服务中。事件过滤器也是如此。

我发现忘记添加身份验证挂钩或事件过滤器的想法很可怕,因为除非我查看了所有服务初始化代码或被黑客入侵,否则我不会注意到错误。从这个意义上说,带有某种白名单的 Express 中间件让我可以轻松地为特殊端点实施某种白名单,这让我更加安心。

有没有可能在 Feathers 中做类似的事情?

(P.S.:我刚刚注意到我保护了我的应用的 REST API,但忘记保护所有实时事件)。

【问题讨论】:

    标签: feathersjs


    【解决方案1】:

    从 v1.6.0 开始,feathers-hooks 支持通过 app.hooks 在所有服务上运行的应用程序挂钩:

    app.hooks({
      before(hook) {
        console.log('Global before hook');
      },
    
      after(hook) {
        console.log('Global after hook');
      },
    
      error(hook) {
        console.error(`Error in ${hook.path} method ${hook.method}`, hook.error.stack);
      }
    });
    

    更多示例请参见this blog post about error and application hooks

    对于实时事件,使用channels,它提供了一种仅将事件发送给应该看到它们的客户端的安全方式。

    【讨论】:

    • app.hooks 是否仍可用于 v2.0.3?我试过了,但是好像不行。
    • 我打算为所有服务添加授权,auth.hooks.restrictToAuthenticated()
    猜你喜欢
    • 2018-08-22
    • 2021-06-12
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多