#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
могут иметь префикс и / или суффикс (но вам на них наплевать).