0

我正在使用以下代码来获取所有用户。它适用于 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。

4

2 回答 2

2

客户端库使用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]);
}
于 2019-04-04T15:15:39.860 回答
2

就像@robotdan 所说,您必须在属性中包含该queryString字段。search尽管乍一看可能并不明确,但您可以通过查看请求正文字段来暗示:

Fusion Auth User API screenshot 正如您在第 3 行中看到的那样search.queryString,您应该在其中定义要搜索的字符串,在您的情况下是所有内容 ( *)。此外,如果您想要一个有序列表,请查看包含可用排序字段的第 6 行,并在第 7 行中查看结果的顺序:asc或者desc(它没有出现在屏幕截图中,因此请查看 FusionAuth 官方文档页面)。

想象一下,您希望所有用户的名称必须包含foo在他们的任何位置fullName,按用户email降序排列。你的对象应该是这样的:

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

注意*开头和结尾的:这些星号告诉搜索引擎foo可能有前缀和/或后缀(但你不关心它们)。

于 2019-09-02T11:02:59.127 回答