Как использовать queryString в клиенте nodejs для 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-запрос.

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

1 ответ

Решение

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

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

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


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

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

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

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

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

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

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

Другие вопросы по тегам