首页 > 解决方案 > Feathersjs:一旦我在之前的函数中将它与另一个链接起来,我的钩子就会失败(失去上下文)

问题描述

我在前钩子(get)中有2个函数(authenticate,restrictAccess),我想将它们链接在一起。但是restrictAccess被执行了两次(到第二轮它已经丢失了上下文)当我删除authenticate时,restrictAccess按预期工作。

这是我的钩子

module.exports = {
  before: {
    all: [],
    get: [authenticate('jwt'), restrictAccess()],
....

但是当我删除身份验证时

module.exports = {
  before: {
    all: [],
    get: [ restrictAccess()],
....

限制访问按预期工作

标签: feathersjsfeathers-hookfeathers-service

解决方案


我能想到的唯一原因是您可能使用了用户服务上的挂钩。

如果是这种情况,authenticate-hook 可能会在内部调用用户服务以将 params.user 设置为请求用户,这将导致对 restrictAccess-hook 的两次调用。

一个可能的解决方法是忽略您的 restrictAccess-hook 中的所有内部调用:

module.exports = context => {
  if (context.params && context.params.provider) {
    // put restriction logik here....
  }

  return context;
}


推荐阅读