使用 "issuerAssignedId" 作为对 b2c 目录的 get() 调用来检查用户是否存在。[爪哇]



我正在尝试实现get((调用来检查b2c目录中的现有用户,为此我使用

User user = graphClient.users("422a535b-a60d-4e5f-833e-2789b32ca04f").buildRequest().get();

这是在返回用户数据,但我只能这样做,因为我有在创建用户时发布的user_id。

User buildUserRequest = graphClient.users()
.buildRequest()
.post(createNewUser);
return buildUserRequest.id;

我有一群JSON格式的用户,我正在尝试迁移,迁移工作正常,JSON看起来像这样:

{
"users": [
{
"displayName": "Sharad Dutta",
"givenName": "",
"surname": "",
"extension_user_type": "user",
"identities": [
{
"signInType": "emailAddress",
"issuerAssignedId": "00bonded007@gmail.com"
}
],
"extension_timezone": "VET",
"extension_locale": "en-GB",
"extension_tenant": "EG12345"
},
{
"displayName": "Wayne Rooney",
"givenName": "Wayne",
"surname": "Rooney",
"extension_user_type": "user",
"identities": [
{
"signInType": "userName",
"issuerAssignedId": "00bonded007"
}
],
"extension_timezone": "VET",
"extension_locale": "en-GB",
"extension_tenant": "EG12345"
}
]
}

当我创建用户时,只要issuerAssignedId不在active directory中,它就可以正常工作。我想处理一个使用get((请求检查issuerAssignedid的情况,如果目录中存在用户,请跳过它,这样代码就不会中断或由于异常而退出。

我可以使用try/catch来完成此操作,但我可以使用issuerAssignedId代替user_id来检查b2c中是否存在用户吗?如果存在,则跳过该用户。

使用此:

LinkedList<QueryOption> requestOptions = new LinkedList<>();
requestOptions.add(new QueryOption("$filter", "identities/any(c:c/issuerAssignedId eq '00bonded007@gmail.com' and c/issuer eq 'contoso.onmicrosoft.com')"));
IUserCollectionPage Users = graphClient.users()
.buildRequest(requestOptions)
.get();

请注意,您应该将contoso.onmicrosoft.com修改为Azure B2C租户。

要回答,当我们发送带有属性的post((请求并返回时

User buildUserRequest = null;
try {
buildUserRequest = graphClient.users()
.buildRequest()
.post(createNewUser);

} catch (GraphServiceException gse) {
LOG.warn("Skipping! userPrincipalName already exists | signInType : " + signInType + " & issuerAssignedId " + issuerAssignedId);
exitFlag = true;
LOG.info("Setting exitFlag for existing user : " + exitFlag);
}

if (exitFlag == true) {
return null;
} else {
return buildUserRequest.id;
}

这将处理任何唯一的条件,而不仅仅是issuerAssignedId。

最新更新