如何在 Stormpath 中通过 ID 和 customData 搜索用户

How to search for users by ID and customData in Stormpath

我正在考虑使用 Stormpath 及其 Java API 作为用户存储。

看起来不错,只是我无法搜索用户。

例如,我得到这个错误:

Exception in thread "main" com.stormpath.sdk.resource.ResourceException: HTTP 400, Stormpath 2105 (http://docs.stormpath.com/errors/2105): Account ID is not a supported query property.

当我执行这个查询时:

HashMap<String, Object> queryParams = Maps.newHashMap();
queryParams.put("ID", "4mPXXXXXXXXXX");
searchResult = application.getAccounts(queryParams);

不过,通过电子邮件搜索用户是可行的。当我尝试通过存储在 customData 属性.

中的登录令牌搜索用户时,我遇到了同样的错误

看来我想做的事是不可能的,因为看起来您可以查询的唯一属性是电子邮件和用户名。但是,如果它不起作用,他们为什么要提供此功能。我错过了什么?

常见的关系数据库行为与 REST API 中的行为之间存在阻抗不匹配。按 id 查询虽然在关系数据库中很常见,但对于 REST APIs(或大多数基于 HTTP 的网站)来说并不是惯用行为。 URL (href) 是网络资源的规范 'pointer'。换句话说,在 REST APIs 中,规范标识符 href。 href 中的任何标记(任何内部 'id'、特殊字符等)对于 REST 客户端都应该是不透明的,并且会被客户端完全忽略。 URLs 在 HTTP 和 REST 中为王。

在这种情况下,Stormpath SDK 会尽量遵循 RESTful 最佳实践,因此您可以使用 client.getResource 方法获取任何 Stormpath 资源,该方法接受 href 和类型您希望 href 代表的对象的数量:

String href = "https://api.stormpath.com/v1/accounts/" + id;
Account account = client.getResource(href, Account.class);

也就是说,希望在客户端 API 中更方便地表示它并没有错,例如,如果您想保留 ID 的概念,client.getAccount(String id)。如果有,请新开一个feature request,我们很乐意考虑。

至于可查询的 Account 属性,它们是 documented here。 Stormpath 很快也会使自定义数据中的数据也可搜索。虽然 Stormpath 功能时间表从未公布,但它是公司的最高工程优先级,应该很快就会发布。

一种对某些人有用的解决方法是将他们想要搜索的数据存储在您不在应用程序中使用的帐户字段中。例如,您可以使用 'middle name' 字段来存储喜欢的颜色。在自定义数据搜索可用之前,这只是暂时的。 HTH!