【问题标题】:lucene query filter not workinglucene 查询过滤器不工作
【发布时间】:2018-04-04 20:30:24
【问题描述】:

我在我的Auth0 Delegated Administration Extension中使用了这个filter hook。

function(ctx, callback) {
  // Get the company from the current user's metadata.
  var company = ctx.request.user.app_metadata && ctx.request.user.app_metadata.company;
  if (!company || !company.length) {
    return callback(new Error('The current user is not part of any company.'));
  }

  // The GREEN company can see all users.
  if (company === 'GREEN') {
    return callback();
  }
  // Return the lucene query.
  return callback(null, 'app_metadata.company:"' + company + '"');
}

当用户以GREEN 登录时,可以看到所有用户。但是当用户以RED登录时,看不到任何公司为RED的用户。

我需要在用户登录时进行此操作,用户应该只能访问其公司内的用户。 (GREEN公司的用户除外)。

但是上面的代码没有给出预期的结果。可能是什么问题?

【问题讨论】:

    标签: lucene auth0 auth0-delegated-admin


    【解决方案1】:

    我终于得到了这个解决方案。

    使用搜索功能过滤用户。我必须更改以下两个文件。

    fetchUsers 中的client\actions\user.js 函数

    改变了

    导出函数 fetchUsers(search = '', reset = false, page = 0)

    到

    导出函数 fetchUsers(search = '@red.com', reset = false, 页 = 0)

    与

    onReset 中的client\containers\Users\Users.jsx 函数

    改变了

    onReset = () => { this.props.fetchUsers('', true); }

    到

    onReset = () => { this.props.fetchUsers('@red.com', true); }

    【讨论】:

      【解决方案2】:

      这可能与User Search documentation page上的一个小警告有关

      基本上,它们不再允许您在 app_metadata 字段中搜索属性。不幸的是,这种变化是突发性的,而且是未经宣布的。

      我们必须对我们的 API 进行更改,以便将 app_metadatas 的副本保存在单独的数据库中,并将 lucene 语法转换为 MongoDB 查询,以便我们可以通过 user_id:"<>" OR user_id:"<>" OR ... 链进行查询。

      但需要注意的是,您不能传递长度超过 72 user_ids 的查询。这个数字到目前为止还没有记录,是凭经验获得的。

      此外,您不能依赖 Auth0 的挂钩将新用户添加到您的数据库中,因为这些不会触发社交登录,仅适用于 Username-Password-Authentication 连接。

      我希望这能给您一些解释,说明为什么它不能像可能的解决方案那样工作。
      如果我是你,我会寻找 Auth0 的替代方案,这就是我们目前正在做的事情。

      【讨论】:

      • 感谢您的回答。这对我帮助很大。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2015-04-23
      • 2018-02-15
      • 1970-01-01
      • 2014-10-10
      • 2012-08-01
      相关资源
      最近更新 更多