Recherche avancée d’utilisateurs
Utilisez directement Management API pour exploiter des conditions de recherche avancées sur les utilisateurs.
Effectuer une requête de recherche
Utilisez GET /api/users pour rechercher des utilisateurs. Notez qu’il s’agit d’une Management API qui nécessite une authentification comme les autres. Consultez Interagir avec Management API pour la recette d’intégration.
Exemple
Requête
curl \
--location \
--request GET \
'http://<your-logto-endpoint>/api/users?search=%25alice%25'
Réponse
Un tableau d’entités User.
[
{
"id": "MgUzzDsyX0iB",
"username": "alice_123",
"primaryEmail": "alice@some.email.domain",
"primaryPhone": null,
"name": null,
"avatar": null
// ...
}
]
Paramètres
Une requête de recherche se compose des clés de paramètres suivantes :
- Mots-clés de recherche :
search,search.* - Mode de recherche pour les champs :
mode,mode.*(valeur par défaut'like', valeurs possibles['exact', 'like', 'similar_to', 'posix']) - Mode de jointure :
jointoujointMode(valeur par défaut'or', valeurs possibles['or', 'and']) - Sensibilité à la casse :
isCaseSensitive(valeur par défautfalse)
Cette API dispose de la pagination.
Voyons-les à travers quelques exemples. Tous les paramètres de recherche seront formatés comme un constructeur de URLSearchParams.
Le mode de recherche est défini sur like par défaut, ce qui utilise la correspondance approximative de chaînes ("recherche floue").
Tous les modes de recherche floue ne prennent en charge la correspondance que d’une seule valeur par champ. Si vous devez faire correspondre plusieurs valeurs pour un même champ, vous devez utiliser le mode "exact". Voir Correspondance exacte et sensibilité à la casse pour plus de détails.
Recherche floue basique
Si vous souhaitez effectuer une recherche floue sur tous les champs disponibles, fournissez simplement une valeur pour la clé search. Cela utilisera l’opérateur like en interne :
new URLSearchParams([['search', '%foo%']]);
Cette recherche itérera sur tous les champs disponibles dans une recherche utilisateur, c’est-à-dire id, primaryEmail, primaryPhone, username, name.
Spécifier les champs
Et si vous souhaitez limiter la recherche uniquement au champ name ? Pour rechercher quelqu’un dont le nom contient foo, utilisez simplement le symbole . pour spécifier le champ :
new URLSearchParams([['search.name', '%foo%']]);
N’oubliez pas que les champs imbriqués ne sont pas pris en charge, par exemple search.name.first entraînera une erreur.
Vous pouvez également spécifier plusieurs champs en même temps :
new URLSearchParams([
['search.name', '%foo%'],
['search.primaryEmail', '%@gmail.com'],
]);
Cela signifie rechercher les utilisateurs qui ont foo dans le nom OU dont l’e-mail se termine par @gmail.com.
Changer le mode de jointure
Si vous souhaitez que l’API ne retourne que les résultats qui satisfont TOUTES les conditions, définissez le mode de jointure sur and :
new URLSearchParams([
['search.name', '%foo%'],
['search.primaryEmail', '%@gmail.com'],
['joint', 'and'],
]);
Cela signifie rechercher les utilisateurs qui ont foo dans le nom ET dont l’e-mail se termine par @gmail.com.
Correspondance exacte et sensibilité à la casse
Supposons que vous souhaitez rechercher les utilisateurs dont le nom est exactement "Alice". Vous pouvez définir mode.name pour utiliser la correspondance exacte.
new URLSearchParams([
['search.name', 'Alice'],
['mode.name', 'exact'],
]);
Vous remarquerez peut-être que cela a le même effet que d’utiliser le mode like (par défaut) par rapport à la spécification de exact. Une différence est que le mode exact utilise = pour comparer tandis que like utilise like ou ilike. Théoriquement, = devrait offrir de meilleures performances.
De plus, en mode exact, vous pouvez passer plusieurs valeurs à faire correspondre, et elles seront reliées par or :
new URLSearchParams([
['search.name', 'Alice'],
['search.name', 'Bob'],
['mode.name', 'exact'],
]);
Cela correspondra aux utilisateurs dont le nom est "Alice" OU "Bob".
Par défaut, la recherche n’est pas sensible à la casse. Pour être plus précis, définissez la recherche comme sensible à la casse :
new URLSearchParams([
['search.name', 'Alice'],
['search.name', 'Bob'],
['mode.name', 'exact'],
['isCaseSensitive', 'true'],
]);
Notez que isCaseSensitive est une configuration globale. Ainsi, TOUS les champs la suivront.
Expression régulière (RegEx)
PostgreSQL prend en charge deux types d’expressions régulières, similar to et posix. Définissez mode sur similar_to ou posix pour rechercher par expressions régulières :
new URLSearchParams([
['search', '^T.?m Scot+$'],
['mode', 'posix'],
]);
Note : Le mode similar_to ne fonctionne que dans les recherches sensibles à la casse.
Surcharge du mode de correspondance
Par défaut, tous les mots-clés hériteront du mode de correspondance de la recherche générale :
new URLSearchParams([
['search', '^T.?m Scot+$'],
['mode', 'posix'],
['search.primaryEmail', 'tom%'], // Mode Posix
['joint', 'and'],
]);
Pour surcharger pour un champ spécifique :
new URLSearchParams([
['search', '^T.?m Scot+$'],
['mode', 'posix'],
['search.primaryEmail', 'tom%'], // Mode Like
['mode.primaryEmail', 'like'],
['search.phone', '0{3,}'], // Mode Posix
['joint', 'and'],
]);
Recherche par identité externe
Pour trouver l’utilisateur lié à une identité sociale ou SSO d’entreprise, passez les trois paramètres de requête suivants ensemble pour une recherche exacte :
identityType:socialpour une identité de connecteur social, oussopour une identité SSO d’entreprise.identityProvider: la cible du connecteur pour une identité sociale (par exemple,dingtalk), ou l’émetteur pour une identité SSO d’entreprise.identityId: l’identifiant utilisateur délivré par le fournisseur d’identité externe.
// Trouver l’utilisateur lié à une identité sociale DingTalk
new URLSearchParams([
['identityType', 'social'],
['identityProvider', 'dingtalk'],
['identityId', 'dingtalk-open-id'],
]);
// Trouver l’utilisateur lié à une identité SSO d’entreprise
new URLSearchParams([
['identityType', 'sso'],
['identityProvider', 'https://example.com/issuer'],
['identityId', 'enterprise-user-id'],
]);
Le filtre d’identité est combiné avec les autres filtres de recherche en utilisant une logique AND. Par exemple, pour affiner davantage la recherche d’identité avec un mot-clé :
new URLSearchParams([
['identityType', 'social'],
['identityProvider', 'dingtalk'],
['identityId', 'dingtalk-open-id'],
['search', '%foo%'],
]);