Как использовать строку запроса в клиенте nodejs для fusionauth?

#fusionauth

#fusionauth

Вопрос:

Я использую следующий код, чтобы получить всех пользователей. Он работает с клиентом Java, но выдает следующую ошибку

{ code: '[invalid]', api_1 | message: 'You must specify either the [ids], [queryString], [email] or [username] property for a GET request.' }

Что я пытаюсь

     let requestJSON = {}
    requestJSON.queryString = "*";
    client.searchUsersByQueryString(requestJSON).then(handleResponse).catch(handleResponse);

    function handleResponse (clientResponse) {
        console.log(clientResponse.errorResponse.generalErrors[0]);
    }
  

Также по какой-то причине предполагается, что это запрос GET.

Я уже пытался сделать то же самое с помощью Postman, и это не сработало. Я использую FusionAuth 1.5.0 везде.

Ответ №1:

Клиентская библиотека использует POST запрос с телом JSON для выполнения поиска. Смотрите POST /api/user/search документацию API здесь https://fusionauth.io/docs/v1/tech/apis/users#search-for-users

Попробуйте это вместо:

 let requestJSON = {
  search: {
    queryString: "*"
  }
};


client.searchUsersByQueryString(requestJSON).then(handleResponse).catch(handleResponse);

function handleResponse (clientResponse) {
  console.log(clientResponse.errorResponse.generalErrors[0]);
}
  

Комментарии:

1. Я не знаю, как я пропустил «поиск.____». Большое спасибо.

2. Также почему вы добавили дополнительный «поиск» в JSON? Я действительно думал с точки зрения дизайна API, но не смог найти никакой причины.

3. Это шаблон, который мы используем для всех наших API, в данном конкретном случае он, возможно, менее полезен. Но для согласованности мы используем его для каждого API.

Ответ №2:

Точно так же, как сказал @robotdan, вы должны включить queryString поле внутри search свойства. Хотя на первый взгляд это может быть неочевидно, вы можете подразумевать это, взглянув на поля тела запроса:

Скриншот пользовательского API Fusion Auth Как вы можете видеть в 3-й строке, есть search.queryString где вы должны определить строку, которую вы ищете, которая в вашем случае является всем ( * ). Кроме того, если вам нужен упорядоченный список, посмотрите на 6-ю строку, содержащую доступные поля сортировки, а в 7-й строке — порядок результатов: asc или desc (это не отображается на скриншоте, поэтому взгляните на страницу официальной документации FusionAuth).

Представьте, что вы хотите, чтобы все пользователи, чье имя должно содержаться foo в любой позиции из них fullName , упорядочивались пользователями email в порядке убывания. Ваш объект должен быть примерно таким:

 const request = {
  search: {
    queryString: '*foo*',
    sortFields: [{ name: 'email', order: 'desc' }]
  }
}
  

Обратите внимание на * в начале и в конце: эти звездочки сообщают поисковой системе, что foo могут иметь префикс и / или суффикс (но вам на них наплевать).