lucene查询过滤器无法正常工作

时间:2017-10-24 06:44:02

标签: lucene auth0 auth0-delegated-admin

我在 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公司的用户除外)。

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

3 个答案:

答案 0 :(得分:1)

这可能与User Search documentation page

上的一点警告提示有关

基本上,他们不允许您在app_metadata字段中搜索属性。不幸的是,这种变化是破裂和未经宣布的。

我们必须对API进行更改,以便将app_metadata的副本保存在单独的数据库中,并将lucene语法转换为MongoDB查询,以便我们可以通过{{1}链查询}。

但有一点需要注意,您无法通过超过72 user_id:"<>" OR user_id:"<>" OR ...长的查询。到目前为止,这个数字没有记录,并且凭经验获得。

此外,您不能依赖Auth0的钩子将新用户添加到您的数据库,因为这些用户不会为社交登录启动,仅适用于user_id个连接。

我希望这能为您提供一些解释,说明为什么它不起作用以及可能的解决方案。
如果我是你,我会为Auth0寻找替代品,这正是我们目前所做的。

答案 1 :(得分:0)

您是否仍然遇到此问题或者您是否已将其修复?我确实有完全相同的问题。我已经用Auth0开了一张支持票 - 我会让你知道我听到了什么。

我认为代码没有任何问题,而是搜索功能 - 返回的lucene查询应该是:app_metadata.company:“RED”

如果您尝试在委派的管理员中运行它而没有应用挂钩,则查询不起作用。我可以搜索独立的用户属性,例如电子邮件:“test@test.com”或名称:“john doe”,但是如果我尝试将搜索串起来,app_metadata.company:“test”或者user_metadata.company:"test“,它不起作用:/

答案 2 :(得分:0)

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

使用搜索功能过滤用户。我不得不改变两个文件。

fetchUsers

中的

client\actions\user.js功能

改变

  

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

  

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

onReset

中的

client\containers\Users\Users.jsx功能

改变

  

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

  

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