问题标签 [feathers-hook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
196 浏览

node.js - Feathers:自定义身份验证、服务与连接级别

我想使用带有羽毛的简单但自定义的身份验证例程,但不明白如何实现它。

要求:每个客户端连接(websocket 或 REST)都必须提供一个会话令牌(我通过其他方式建立并保存为 cookie)。服务器中间件验证此会话令牌(针对服务),如果成功则添加用户对象,否则断开连接。

我是否正确,这是不可能实现的feathers-authenticate?官方认证文档以 JWT 为中心,没有提到任何不依赖护照的方法。

可以使用应用程序钩子,例如应用程序级之前的钩子。但这仍然允许用户建立例如 websocket 连接,因为身份验证仅在服务级别上,对吗?我不认为这是理想的。我希望我的身份验证在建立连接(websocket,或者也用于 REST 的 HTTP)时运行,并在不成功时直接放在那里。

我可以用羽毛做这个吗?

0 投票
1 回答
281 浏览

promise - FeathersJS:如何使用钩子后面的错误取消身份验证钩子

app.authenticate在客户端使用。
它在服务器上创建钩子之前调用了身份验证钩子。
我从 'feathers-authentication-manage.hook' 导入为verifyHooks.

在创建钩子之前:

按顺序排列的 3 个钩子是:
1. 身份验证
2. 我的钩子
3.isVerified()来自羽毛身份验证管理的电子邮件验证钩子

isVerified()在客户端,即使是在身份验证钩子之后,当钩子激活时,身份验证承诺也会被拒绝。
如果我删除了isVerified()钩子,那么身份验证承诺就会解决。

如何使我的钩子(第二个钩子)表现得像isVerified()拒绝客户端上的身份验证承诺?

0 投票
1 回答
578 浏览

feathersjs - 从服务调用中删除 context.query.params,但将其保留为 URL 参数

我使用feathersjs 和mongoose 创建了一个“产品”服务。这是我的服务:

我的猫鼬模型包括一些字段,如“名称”、“类别”等。但这对我的问题并不重要。

当我这样调用我的服务时:

http://localhost:3030/products?lang=fr

由于“lang”不是我的数据库产品的条目,我没有得到任何结果。

有没有办法从查询中删除“lang”参数,但要保留它以便在我的钩子中使用它。

我试过discardQuery,但它会删除参数,我不能再在我的钩子中使用它了。

谢谢你的帮助

解决方案

感谢 daff,我找到了一个解决方案,在之前的钩子中,我像这样附加了我的 params.query.lang:

在我丢弃我的 context.params.query.lang 以将其从查询中删除之后

然后我能够在我的后挂钩中获得这样的 lang 参数:

0 投票
1 回答
731 浏览

javascript - FeathersJS 中的非 CRUD 路由

我有一项服务可以results处理. 我将如何创建一个基本上以该特定 id 获取结果并使用结果数据创建条形图的路由。resultsfeathersjs/results/:id/hr_bar_graph

我目前的代码是:

现在被困在这里一段时间了。请帮忙。

0 投票
0 回答
937 浏览

sequelize.js - 使用 feathers-sequelize 排序查询

我正在尝试编写一个钩子,它将排序添加到具有关联的表上的查询中。我的查询是关于“points”的,它有一个连接表“point_photos”,然后将 m:n 关联到“photos”。标准的feathersjs $sort 不能用于关联排序,所以我尝试在一个钩子中设置sequelize ' order ',这非常有效。现在我想从查找查询中设置“订单”:

但现在我得到:

这对我来说很奇怪,因为 hook.params.sequelize 对我来说钩子和查询看起来一样......

此外,当我简化查找查询“订单”时,我得到了同样的错误;不允许向查询对象添加“订单”吗?

编辑:我设法通过将订单添加到“包含”选项来解决它:

并相应地调整我的关联钩子。这有点愚蠢,尽管在续集中“订单”与“包含”处于同一级别,所以它使事情变得混乱。我的问题仍然归结为:为什么查询对象中的“订单”键不起作用?看起来它以某种方式被认为是一个表字段。

0 投票
1 回答
979 浏览

javascript - 如何在 Feathersjs 中按年份查询时间戳字段?

目前我有一个时间戳字段,其值格式如1479664146607.

我想要做的是获取所有带有时间戳的数据,比如说一年2017

我当前的代码表现不佳。它获取所有数据,然后使用过滤方法。

假设我有 2000 多条记录。

虽然此代码有效,但它会杀死服务器。

我的数据库是 nedb 并且使用 feathersjs,我实际上可以通过

此代码将不起作用,因为它将搜索确切的年份。我正在寻找一种在数据库中搜索时间戳字段之前将其转换为年份的方法。

0 投票
1 回答
75 浏览

node.js - 如何在钩子之前获取 StandAlone 模型以将其包含在上下文中以及如何在 include 中提及多个关联模型

如何在钩子之前获取 StandAlone 模型以将其包含在上下文中以及如何在 include 中提及多个关联模型

0 投票
1 回答
54 浏览

javascript - 上下文值在嵌套循环中未定义

下面的 java-script 代码上下文值在嵌套循环内变得未定义。但在嵌套循环外,值正确显示。

请帮助显示循环内的上下文值。

输出:-

0 投票
1 回答
1169 浏览

javascript - 无法通过featherjs中的find函数将参数传递给服务挂钩

Featherjs find 服务无法通过 find 函数传递额外的参数。在下面找到将额外参数数据传递给服务的服务。但无法在服务挂钩处接收价值。

客户端代码:

服务器代码(服务挂钩):

参数数据未在服务器接收 --> params:{ name:'sam' }

服务器/服务挂钩处的输出:

0 投票
1 回答
1314 浏览

feathersjs - 挂钩以检查用户是否在 Feathers 中进行了身份验证(如果没有,则不发送未经授权的错误,只需检查)

我想为数据库中的文档实现一个简单的“已发布”字段。

例如,如果用户未通过身份验证,我希望始终在查询中插入 { published: true } 以获取所有查找/获取请求,因此它将仅返回已发布的文档(在前端有用)

但是,如果用户已通过身份验证并具有所需的角色,我想返回所有文档,而不仅仅是已发布(在管理员中很有用)。

所以我试图创建一个前钩子:

//assignQuery.hook.js

// service.hooks.js

问题是我必须对用户进行身份验证才能获得他的角色,因此如果用户未通过身份验证,服务将发送未经授权的错误,而不是允许过滤查询的响应。

所以我必须在assignQuery之前调用authenticate。在这种情况下,管理员可以正常工作,但前端未经授权的用户无法检索已发布的文章。

如果我在 assignQuery 之前不进行身份验证,它在前端工作正常,未经授权的用户只能看到已发布的文章,但在管理员中不再工作,管理员也将始终只收到已发布的文章,因为在 assignQuery 挂钩中, context.params.user 未定义(因为我们之前没有进行身份验证......)

所以我需要一种方法来检查用户是否经过身份验证,但如果他未经授权,则不要向他发送未经授权的错误,我只想发送修改后的查询的响应。

我想我需要这样的东西:

但我不知道如何进行“无阻塞”身份验证或 isAuthenticate 钩子。可能吗?

我希望我的解释不会那么混乱,目标只是为我的文档实现一个已发布/草稿(可见/隐藏)(在线/离线)字段。

欢迎任何帮助。太感谢了!