我在 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公司的用户除外)。
但是上面的代码没有给出预期的结果。可能是什么问题?
答案 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); }