【问题标题】:Feathers / Socket.io authenticationFeathers / Socket.io 身份验证
【发布时间】:2017-01-18 01:20:13
【问题描述】:

我有一个正常工作的 Feathers 应用程序,它有很多服务身份验证钩子,但 socket.io 过滤器很少。

我不清楚对 socket.io 端点的访问是否需要对用户进行身份验证以及服务挂钩如何影响他们。

首先,socket.io 连接是否只允许经过身份验证的用户使用?如果没有,有没有办法实现这个限制?

其次,我想通过 socket.io 发出的数据将是所有后挂钩执行后来自服务方法的hook.result。所以hooks.remove('password') 将防止密码字段通过 socket.io 泄漏。这个假设正确吗?

第三,我想事件会发送给所有连接的用户。这就是为什么我需要指定过滤器来限制将哪些事件发送给哪些用户。有没有办法在 pre-hook 级别进行此类过滤,以避免在 socket.io 级别重复 HTTP 访问控制代码?

【问题讨论】:

    标签: feathersjs


    【解决方案1】:

    Feathers 服务挂钩与传输无关。无论是通过 REST HTTP 还是 websockets 访问,身份验证钩子都将起作用。如果可能,应处理身份验证through the client,但也可以是done through sockets directly

    在身份验证期间,用户对象将附加到套接字。这是connection (connection.user) 中的filter 提供的内容。

    remove 钩子有点特殊,因为它不为内部访问而运行,因此另外创建一个过滤器来清理您的数据(总是删除字段)是有意义的。 feathers-hooks-common 已经做了一些提供钩子和过滤器的工作,下一个版本将有更统一的方式同时处理钩子和过滤器。

    【讨论】:

    • 但是当通过套接字访问时,provider 不为空,所以 remove 钩子不应该考虑内部访问,因此应该删除数据,不是吗?
    • 但是等等,身份验证挂钩是在每个服务方法的基础上指定的。生成的事件呢?我是否需要通过身份验证才能接收事件?这是我最关心的问题。
    • Feathers 不会对您想要做什么做出任何假设。由于身份验证(和过滤)是防止未经身份验证的用户获取事件的插件,因此您必须注册一个app.service('myservice').filter((data, connection) => !!connection.user) 过滤器。
    • 另外,是的,当从外部访问时,它将删除事件的数据。但是,如果您在服务器上创建或修改用户,则必须添加我提到的过滤器(这肯定会在将来变得更容易)。
    • 哦,哇,现在我明白了!我认为可以编辑答案以使这些事实更清楚,我认为它们非常重要。
    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2015-08-29
    • 1970-01-01
    • 2018-07-23
    • 2018-08-03
    • 2012-11-06
    • 2021-11-18
    • 2013-11-02
    相关资源
    最近更新 更多