Syntaxe de la requête de recherche de l’utilisateur

Lors de la recherche d’utilisateurs, vous pouvez créer des requêtes en utilisant la syntaxe de requête Lucene pour affiner votre recherche.

La chaîne de requête est analysée en séries de termes et d’opérateurs :

  • Un terme peut être un mot unique tel que jane ou smith.

  • Il peut s’agir d’une phrase entourée de guillemets ("green apple"), qui correspondra à tous les mots de la phrase dans le même ordre.

  • Un terme sans nom de champ ne correspondra pas au texte des champs métadonnées utilisateur.

  • Plusieurs termes peuvent être regroupés entre parenthèses pour former des sous-requêtes.

  • Les valeurs de recherche pour les champs utilisateur normalisés (email, name, given_name, family_name, et nickname) sont insensibles à la casse. Tous les autres champs (y compris tous les champs app_metadata/user_metadata) sont sensibles à la casse.

  • Les opérateurs (AND, OR, NOT) fonctionnent sur tous les champs utilisateur normalisés et les champs de métadonnées racine.

  • Les opérateurs doivent toujours être mis en majuscules.

Champs pouvant être recherchés

Vous pouvez rechercher des utilisateurs à l’aide de tous les champs de profil utilisateur normalisé et des champs ci-dessous :

Rercherche Champ Type  de données Description
phone_number texte Le numéro de téléphone de l’utilisateur. Valide uniquement pour les utilisateurs disposant d’un appareil compatible SMS.
phone_verified booléen La valeur true/false (« vrai/faux ») indique si le numéro de téléphone de l’utilisateur a été vérifié. Valide uniquement pour les utilisateurs disposant d’un appareil compatible SMS.
logins_count entier Le nombre de fois où l’utilisateur s’est connecté. Si un utilisateur est bloqué et se connecte, la session bloquée est comptabilisée dans logins_count et met à jour la valeur last_login.
created_at date time Horodatage de la création du profil utilisateur.
updated_at date time Horodatage de la dernière mise à jour/modification du profil de l’utilisateur.
last_login date time L’horodatage de la dernière connexion de l’utilisateur. Dans le cas où cette propriété est exécutée à l’intérieur d’une Rule (Règle avec l’objet user, la valeur sera employée pour la connexion qui a déclenché la règle (puisque les Règles s’exécutent après la connexion réelle).
last_ip texte (adresse IP valide) L’adresse IP employée lors de la dernière connexion de l’utilisateur.
blocked booléen La valeur true (vrai) ou false (faux) indique si l’utilisateur a été bloqué. Remarque : true rapporte seulement les utilisateurs bloqués via le tableau de bord de l’administrateur et Management API; il ne rapporte pas les utilisateurs bloqués par la détection d’anomalie par force brute.
email.domain texte La partie domaine du courriel de l’utilisateur.
organization_id text (identifiant d’organization valide) L’organization dont l’utilisateur est membre.

Les champs de métadonnées peuvent être utilisés avec :

  • booléen

  • numériques : entiers ou doubles

  • texte

  • objets : pour rechercher une valeur scalaire imbriquée dans un autre objet, utilisez le chemin d’accès au champ. Par exemple, app_metadata.subscription.plan:"gold"

  • tableaux : pour rechercher des champs dans des objets imbriqués dans des tableaux, utilisez le chemin d’accès au champ et ignorez le niveau du tableau. Par exemple, user_metadata.addresses.city:"Paris"

Les champs de métadonnées qui contiennent un tableau vide, un objet vide ou une valeur null ne sont pas indexés et ne peuvent pas être recherchés.

Les recherches par plage et par caractères de remplacement ne sont pas utilisables sur les champs user_metadata.

Correspondance exacte

Pour trouver des correspondances exactes, utilisez des guillemets doubles : name:"jane smith".

Par exemple, pour trouver les utilisateurs portant le nom jane smith, utilisez q=name:"jane smith" :


curl --request GET \
  --url 'https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3' \
  --header 'authorization: Bearer {yourMgmtApiAccessToken}'

Was this helpful?

/
var client = new RestClient("https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3");
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", "Bearer {yourMgmtApiAccessToken}");
IRestResponse response = client.Execute(request);

Was this helpful?

/
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("authorization", "Bearer {yourMgmtApiAccessToken}")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Was this helpful?

/
HttpResponse<String> response = Unirest.get("https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3")
  .header("authorization", "Bearer {yourMgmtApiAccessToken}")
  .asString();

Was this helpful?

/
var axios = require("axios").default;

var options = {
  method: 'GET',
  url: 'https://{yourDomain}/api/v2/users',
  params: {q: 'name:"jane smith"', search_engine: 'v3'},
  headers: {authorization: 'Bearer {yourMgmtApiAccessToken}'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Was this helpful?

/
#import <Foundation/Foundation.h>

NSDictionary *headers = @{ @"authorization": @"Bearer {yourMgmtApiAccessToken}" };

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    NSLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    NSLog(@"%@", httpResponse);
                                                }
                                            }];
[dataTask resume];

Was this helpful?

/
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "authorization: Bearer {yourMgmtApiAccessToken}"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

Was this helpful?

/
import http.client

conn = http.client.HTTPSConnection("")

headers = { 'authorization': "Bearer {yourMgmtApiAccessToken}" }

conn.request("GET", "/{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

Was this helpful?

/
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["authorization"] = 'Bearer {yourMgmtApiAccessToken}'

response = http.request(request)
puts response.read_body

Was this helpful?

/
import Foundation

let headers = ["authorization": "Bearer {yourMgmtApiAccessToken}"]

let request = NSMutableURLRequest(url: NSURL(string: "https://{yourDomain}/api/v2/users?q=name%3A%22jane%20smith%22&search_engine=v3")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()

Was this helpful?

/

Recherche générique

Les recherches par caractères de remplacement peuvent être effectuées sur les termes en utilisant le caractère astérisque (*) pour remplacer zéro ou plusieurs caractères. Les recherches par caractères de remplacement ne sont pas utilisables pour les champs user_metadata.

Exemples

  • name:john* renvoie tous les utilisateurs dont le nom commence par john.

  • name:j* renvoie tous les utilisateurs dont le nom commence par j.

  • q=name:john* renvoie tous les utilisateurs dont le nom commence par john.

  • Pour la correspondance des suffixes, les éléments littéraux doivent comporter trois caractères ou plus. Par exemple, name:*usa est autorisé, mais name:*sa ne l’est pas.


curl --request GET \
  --url 'https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3' \
  --header 'authorization: Bearer {yourMgmtApiAccessToken}'

Was this helpful?

/
var client = new RestClient("https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3");
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", "Bearer {yourMgmtApiAccessToken}");
IRestResponse response = client.Execute(request);

Was this helpful?

/
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("authorization", "Bearer {yourMgmtApiAccessToken}")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Was this helpful?

/
HttpResponse<String> response = Unirest.get("https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3")
  .header("authorization", "Bearer {yourMgmtApiAccessToken}")
  .asString();

Was this helpful?

/
var axios = require("axios").default;

var options = {
  method: 'GET',
  url: 'https://{yourDomain}/api/v2/users',
  params: {q: 'name:john*', search_engine: 'v3'},
  headers: {authorization: 'Bearer {yourMgmtApiAccessToken}'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Was this helpful?

/
#import <Foundation/Foundation.h>

NSDictionary *headers = @{ @"authorization": @"Bearer {yourMgmtApiAccessToken}" };

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    NSLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    NSLog(@"%@", httpResponse);
                                                }
                                            }];
[dataTask resume];

Was this helpful?

/
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "authorization: Bearer {yourMgmtApiAccessToken}"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

Was this helpful?

/
import http.client

conn = http.client.HTTPSConnection("")

headers = { 'authorization': "Bearer {yourMgmtApiAccessToken}" }

conn.request("GET", "/{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

Was this helpful?

/
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["authorization"] = 'Bearer {yourMgmtApiAccessToken}'

response = http.request(request)
puts response.read_body

Was this helpful?

/
import Foundation

let headers = ["authorization": "Bearer {yourMgmtApiAccessToken}"]

let request = NSMutableURLRequest(url: NSURL(string: "https://{yourDomain}/api/v2/users?q=name%3Ajohn*&search_engine=v3")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()

Was this helpful?

/

Plages

Vous pouvez utiliser des plages dans vos requêtes de recherche d’utilisateurs. Les recherches par plage ne sont pas utilisables pour les champs de métadonnées utilisateur.

  • Pour les plages inclusives, utilisez des crochets : [min TO max].

  • Pour les plages exclusives, utilisez des crochets : {min TO max}.

  • Les crochets et les apostrophes courbes peuvent être combinés dans la même expression de plage : logins_count:[100 TO 200}.

  • Utilisez les plages en combinaison avec des caractères de remplacement. Par exemple, pour trouver tous les utilisateurs ayant plus de 100 connexions, utilisez q=logins_count:{100 TO *].


curl --request GET \
  --url 'https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3' \
  --header 'authorization: Bearer {yourMgmtApiAccessToken}'

Was this helpful?

/
var client = new RestClient("https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3");
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", "Bearer {yourMgmtApiAccessToken}");
IRestResponse response = client.Execute(request);

Was this helpful?

/
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("authorization", "Bearer {yourMgmtApiAccessToken}")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Was this helpful?

/
HttpResponse<String> response = Unirest.get("https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3")
  .header("authorization", "Bearer {yourMgmtApiAccessToken}")
  .asString();

Was this helpful?

/
var axios = require("axios").default;

var options = {
  method: 'GET',
  url: 'https://{yourDomain}/api/v2/users',
  params: {q: 'logins_count:{100 TO *]', search_engine: 'v3'},
  headers: {authorization: 'Bearer {yourMgmtApiAccessToken}'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Was this helpful?

/
#import <Foundation/Foundation.h>

NSDictionary *headers = @{ @"authorization": @"Bearer {yourMgmtApiAccessToken}" };

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    NSLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    NSLog(@"%@", httpResponse);
                                                }
                                            }];
[dataTask resume];

Was this helpful?

/
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "authorization: Bearer {yourMgmtApiAccessToken}"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

Was this helpful?

/
import http.client

conn = http.client.HTTPSConnection("")

headers = { 'authorization': "Bearer {yourMgmtApiAccessToken}" }

conn.request("GET", "/{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

Was this helpful?

/
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["authorization"] = 'Bearer {yourMgmtApiAccessToken}'

response = http.request(request)
puts response.read_body

Was this helpful?

/
import Foundation

let headers = ["authorization": "Bearer {yourMgmtApiAccessToken}"]

let request = NSMutableURLRequest(url: NSURL(string: "https://{yourDomain}/api/v2/users?q=logins_count%3A%7B100%20TO%20*%5D&search_engine=v3")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()

Was this helpful?

/

Exemples d’attributs de profil pouvant faire l’objet d’une recherche

Lorsque vous recherchez des utilisateurs dans Management API Auth0, vous pouvez filtrer les utilisateurs par user_metadata ou app_metadata. Pour ce faire, vous pouvez utiliser la syntaxe de recherche Lucene avec le paramètre q .

La liste de Management API Auth0 ou le point de terminaison de recherche des utilisateurs étant limité à 1 000 résultats (10 pages de 100 enregistrements), le filtrage est un moyen utile de s’assurer que les résultats les plus pertinents sont renvoyés.

Vous trouverez ci-dessous un exemple de profil utilisateur user_metadata :

{
  "favorite_color": "blue",
  "approved": false,
  "preferredLanguage": "en",
  "preferences": {
    "fontSize": 13
  },
  "addresses":{
    "city":["Paris","Seattle"]
  }
}

Was this helpful?

/

Filtrer les attributs de métadonnées

Pour renvoyer une valeur user_metadata, mettez à jour la requête q avec un filtre pour l’attribut.

Pour les valeurs user_metadata vous pouvez interroger le profil directement :

q: _exists_:user_metadata.fav_color

Cette requête renvoie tous les profils utilisateurs dont l’attribut fav_color figure dans les métadonnées user_metadata.

Filtrer les attributs et les valeurs des objets imbriqués des métadonnées

Vous pouvez également effectuer une recherche sur les objets imbriqués dans user_metadata :

q: _exists_:user_metadata.preferences.fontSize

Ceci permet d’interroger tous les profils utilisateurs dont les preferences.fontSize sont configurés dans les métadonnées user_metadata.

Pour rechercher les valeurs d’un objet imbriqué à partir d’un autre objet, examinez la requête ci-dessous :

q: user_metadata.preferences.fontSize:13

Cette requête renvoie tous les profils utilisateurs qui correspondent à l’attribut fontSize avec la valeur 13.

Filtrer les valeurs des tableaux imbriqués de métadonnées

Vous pouvez utiliser la requête ci-dessous pour rechercher des champs dans des tableaux imbriqués :

q: user_metadata.addresses.city:"Seattle"

Cette requête renvoie tous les profils utilisateurs qui renvoient la valeur Seattle à partir des attributs adress.citydans les user_metadata.

En savoir plus