我想要什么
我希望能够在不发送电子邮件的情况下重置用户密码。我还需要通过 REST 来执行此操作(它适用于信息亭系统)。
所以我需要:
尽我所能,我无法使用用户名获取用户。
问题
在我通过 REST 使用管理员用户登录后,我会:
GET on http://mydomain.com/rest/user?name=user
.根据 REST 文档,这应该得到名为
user
的用户。 .我收到 200 条回复,但是 正文中没有返回任何内容 .
我试过的
从 ID 获取节点
以管理员身份登录后,我可以执行以下操作:
获取 http://mydomain.com/rest/user/1
这有效,在响应中返回用户 1 的详细信息。但我需要按用户名搜索用户。
不同的 GET
GET on http://mydomain.com/rest/user/admin
GET on http://mydomain.com/rest/user/account/name/admin
GET on http://mydomain.com/rest/user?account[name]=admin
GET on http://mydomain.com/rest/user?uid=1
GET on http://mydomain.com/rest/user/retrieve?uid=1
GET on http://mydomain.com/rest/user?account[uid]=1
所有这些都失败了。
节点代替用户
获取
http://mydomain.com/rest/node/1
有效,但 http://mydomain.com/rest/node?nid=1
给我一个 200 的响应,体内什么都没有。所有用户列表
GET on http://mydomain.com/rest/user/
也不显示所有用户的列表。我再次得到一个 200 的空体。更多细节
问题
如何获取具有特定用户名的用户?我究竟做错了什么?
更新
我已经卸载然后重新安装了服务模块,我对 REST 服务器做了同样的事情。我还将我的 CTools 版本回滚到最新推荐的版本。我添加了一项全新的服务,以防它被损坏。我所做的一切都不起作用。令人沮丧!
更新 2
我找到了问题,但想要一个更永久的解决方案。事实证明这是由于表命名而导致的错误。请参阅我当前接受的答案。
最佳答案
对不起,这让你很沮丧。我是服务模块的维护者,并且确实在处理文档,但我想我会在这里回答以让您继续前进。
你没有得到任何你想要的数据的原因是你传递的参数是错误的。
如果你看 user_resource.inc 索引定义如下
'index' => array(
'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/user_resource'),
'callback' => '_user_resource_index',
'args' => array(
array(
'name' => 'page',
'optional' => TRUE,
'type' => 'int',
'description' => 'The zero-based index of the page to get, defaults to 0.',
'default value' => 0,
'source' => array('param' => 'page'),
),
array(
'name' => 'fields',
'optional' => TRUE,
'type' => 'string',
'description' => 'The fields to get.',
'default value' => '*',
'source' => array('param' => 'fields'),
),
array(
'name' => 'parameters',
'optional' => TRUE,
'type' => 'array',
'description' => 'Parameters',
'default value' => array(),
'source' => array('param' => 'parameters'),
),
),
'access arguments' => array('access user profiles'),
'access arguments append' => FALSE,
),
注意第三个参数,参数。
只要打开索引查询,您就可以做各种有趣的事情,但是您没有尝试过的是 ?parameters[name]=user 下面的示例
当我向 http://test/api/user?parameters[name]=gdsfgsdfgsdfg&fields=name,uid 提出请求时
我被退回
[
{
"name":"gdsfgsdfgsdfg",
"uid":"36",
"uri":"http:\/\/test\/api\/user\/36"
}
]
请注意,我还添加了一些字段,uid 和 name。显然这些是可选的,但它向您展示了索引查询的力量。这同样适用于节点。
我希望这有帮助。
关于web-services - 如何使用 REST 使用来自 drupal 的查询字符串检索用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429681/