我们目前使用Auth0进行身份验证,并使用user.app_metadata
对象存储每个用户的租户信息。我们还要求每个租户列出用户。
遗憾的是,Auth0的政策是,在查询用户时无法搜索app_metadata
字段。
但是,您可以使用身份提供商过滤用户,因此每个租户我都创建了自定义数据库连接。
问题是我如何使用托管页面登录用户使用多个客户数据库连接?如果我使用options.allowedConnections
对象提供可用连接数组,则它只是默认为第一个连接,这意味着不在该连接上的用户无法登录。
我在这里做错了什么?
var lock = new Auth0Lock(config.clientID, config.auth0Domain, {
auth: {
redirectUrl: config.callbackURL,
responseType: (config.internalOptions || {}).response_type ||
config.callbackOnLocationHash ? 'token' : 'code',
params: config.internalOptions
},
assetsUrl: config.assetsUrl,
allowedConnections: ['company-a', 'company-b', 'company-c], //this doesn't seem to work
rememberLastLogin: !prompt,
language: language,
languageDictionary: languageDictionary,
theme: {
logo: 'http://www.mydomain.co/img/logo.png',
primaryColor: 'purple'
},
prefill: loginHint ? { email: loginHint, username: loginHint } : null,
closable: false,
// uncomment if you want small buttons for social providers
// socialButtonStyle: 'small'
});
lock.show();
答案 0 :(得分:3)
发布问题后,无法搜索app_metadata
。现在,可以使用search_engine v3通过Management API User Search endpoint来搜索app_metadata。
基于此,最简单的实现方法是坚持单一连接,同时将租户信息存储在app_metadata
中。然后,您可以根据元数据属性执行用户搜索,例如app_metadata.tenant_name:"Tenant1"
。
如果您希望坚持使用多个数据库连接,则Lock现在支持connectionResolver
选项,该选项可用于根据某些自定义逻辑(例如,输入的电子邮件地址)来确定用于验证用户身份的连接。以下文档对此进行了更详细的概述:
https://auth0.com/docs/libraries/lock/v11/selecting-the-connection-for-multiple-logins#selecting-among-multiple-database-connections