Erweiterte Benutzersuche
Direkte Nutzung der Management API, um erweiterte Benutzersuchbedingungen zu nutzen.
Eine Suchanfrage durchführen
Verwende GET /api/users
, um Benutzer zu suchen. Beachte, dass es sich um eine Management API handelt, die wie andere Authentifizierung erfordert. Siehe Interaktion mit der Management API für das Interaktionsrezept.
Beispiel
Anfrage
curl \
--location \
--request GET \
'http://<your-logto-endpoint>/api/users?search=%25alice%25'
Antwort
Ein Array von User
-Entitäten.
[
{
"id": "MgUzzDsyX0iB",
"username": "alice_123",
"primaryEmail": "[email protected]",
"primaryPhone": null,
"name": null,
"avatar": null
// ...
}
]
Parameter
Eine Suchanfrage besteht aus den folgenden Parameter-Schlüsseln:
- Suchbegriffe:
search
,search.*
- Suchmodus für Felder:
mode
,mode.*
(Standardwert'like'
, verfügbar['exact', 'like', 'similar_to', 'posix']
) - Verknüpfungsmodus:
joint
oderjointMode
(Standardwert'or'
, verfügbar['or', 'and']
) - Ist Groß-/Kleinschreibung beachten:
isCaseSensitive
(Standardwertfalse
)
Diese API hat Paginierung aktiviert.
Lass uns einige Beispiele durchgehen. Alle Suchparameter werden als Konstruktor von URLSearchParams
formatiert.
Der Suchmodus ist standardmäßig auf like
gesetzt, was Annähernde Zeichenfolgenübereinstimmung ("unscharfe Suche") verwendet.
Alle unscharfen Suchmodi unterstützen nur die Übereinstimmung eines Wertes pro Feld. Wenn du mehrere Werte für ein einzelnes Feld abgleichen musst, solltest du den "exact"-Modus verwenden. Siehe Exakte Übereinstimmung und Groß-/Kleinschreibung für Details.
Grundlegende unscharfe Suche
Wenn du eine unscharfe Suche über alle verfügbaren Felder durchführen möchtest, gib einfach einen Wert für den Schlüssel search
an. Es wird den like
-Operator im Hintergrund verwenden:
new URLSearchParams([['search', '%foo%']]);
Diese Suche wird über alle verfügbaren Felder in einer Benutzersuche iterieren, d.h. id
, primaryEmail
, primaryPhone
, username
, name
.
Felder angeben
Was ist, wenn du die Suche nur auf name
beschränken möchtest? Um jemanden zu suchen, der foo
in seinem Namen hat, verwende einfach das .
-Symbol, um das Feld anzugeben:
new URLSearchParams([['search.name', '%foo%']]);
Denke daran, dass verschachtelte Felder nicht unterstützt werden, z.B. search.name.first
wird zu einem Fehler führen.
Du kannst auch mehrere Felder gleichzeitig angeben:
new URLSearchParams([
['search.name', '%foo%'],
['search.primaryEmail', '%@gmail.com'],
]);
Bedeutet, Benutzer zu suchen, die foo
im Namen haben ODER deren E-Mail mit @gmail.com
endet.
Ändern des Verknüpfungsmodus
Wenn du möchtest, dass die API nur das Ergebnis zurückgibt, das ALLE Bedingungen erfüllt, setze den Verknüpfungsmodus auf and
:
new URLSearchParams([
['search.name', '%foo%'],
['search.primaryEmail', '%@gmail.com'],
['joint', 'and'],
]);
Bedeutet, Benutzer zu suchen, die foo
im Namen haben UND deren E-Mail mit @gmail.com
endet.
Exakte Übereinstimmung und Groß-/Kleinschreibung
Angenommen, du möchtest nach jemandem suchen, dessen Name genau "Alice" ist. Du kannst mode.name
auf exakte Übereinstimmung setzen.
new URLSearchParams([
['search.name', 'Alice'],
['mode.name', 'exact'],
]);
Du wirst feststellen, dass es denselben Effekt hat, wenn du den like
-Modus (Standard) verwendest im Vergleich zu exact
. Ein Unterschied ist, dass der exact
-Modus =
zum Vergleichen verwendet, während like
like
oder ilike
verwendet. Theoretisch sollte =
eine bessere Leistung haben.
Außerdem kannst du im exact
-Modus mehrere Werte zum Abgleichen übergeben, und sie werden mit or
verbunden:
new URLSearchParams([
['search.name', 'Alice'],
['search.name', 'Bob'],
['mode.name', 'exact'],
]);
Es wird die Benutzer mit dem Namen "Alice" ODER "Bob" abgleichen.
Standardmäßig ist die Suche nicht groß-/kleinschreibungssensitiv. Um präziser zu sein, setze die Suche als groß-/kleinschreibungssensitiv:
new URLSearchParams([
['search.name', 'Alice'],
['search.name', 'Bob'],
['mode.name', 'exact'],
['isCaseSensitive', 'true'],
]);
Beachte, dass isCaseSensitive
eine globale Konfiguration ist. Daher wird JEDES Feld ihr folgen.
Regulärer Ausdruck (RegEx)
PostgreSQL unterstützt zwei Arten von regulären Ausdrücken, similar to und posix. Setze mode
auf similar_to
oder posix
, um nach regulären Ausdrücken zu suchen:
new URLSearchParams([
['search', '^T.?m Scot+$'],
['mode', 'posix'],
]);
Hinweis: Der Modus similar_to funktioniert nur bei groß-/kleinschreibungssensitiven Suchen.
Übereinstimmungsmodus überschreiben
Standardmäßig erben alle Schlüsselwörter den Übereinstimmungsmodus von der allgemeinen Suche:
new URLSearchParams([
['search', '^T.?m Scot+$'],
['mode', 'posix'],
['search.primaryEmail', 'tom%'], // Posix-Modus
['joint', 'and'],
]);
Um für ein bestimmtes Feld zu überschreiben:
new URLSearchParams([
['search', '^T.?m Scot+$'],
['mode', 'posix'],
['search.primaryEmail', 'tom%'], // Like-Modus
['mode.primaryEmail', 'like'],
['search.phone', '0{3,}'], // Posix-Modus
['joint', 'and'],
]);