我希望能够重置用户密码而无需通过电子邮件发送。我还需要通过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版本推回到最新推荐的版本。我已经添加了一个全新的服务,以防它被破坏。我什么都做不了。令人沮丧!
我发现了问题,但想要一个更持久的解决方案。事实证明,由于表命名,这是一个错误。请参阅我当前接受的答案。
答案 0 :(得分:3)
对不起,这对你来说太令人沮丧了。我是服务模块的维护者,并且真的在编写文档,但我想我会在这里回答让你继续前进。
您没有获得任何所需数据的原因是您传递的参数错误。
如果你看一下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,
),
注意第三个参数,参数。 你可以使用索引查询做各种有趣的事情,只要它打开,但你尝试过的是什么?参数[name] = user下面的例子
当我向http://test/api/user?parameters[name]=gdsfgsdfgsdfg&fields=name,uid提出请求时 我回来了
[
{
"name":"gdsfgsdfgsdfg",
"uid":"36",
"uri":"http:\/\/test\/api\/user\/36"
}
]
注意我还添加了一些字段,uid和name。显然这些是可选的,但它向您展示了索引查询的强大功能。这同样适用于节点。
我希望这会有所帮助。
答案 1 :(得分:1)
尝试类似:
GET on http://mydomain.com/rest/user?parameters[name]=admin
这在Drupal7中对我有用。不确定它是否会相同6.但我也没有问题在http://mydomain.com/rest/user/上使用GET获取所有用户的索引
答案 2 :(得分:1)
我发现了这个问题。这是我所拥有的设置中的服务模块的错误/错误。
来自services.module
档案
449 // Now implode that array into an actual WHERE clause.
450 $where = !empty($where) ? ' WHERE '. implode(' AND ', $where) : '';
451 // Run through db_rewrite_sql to make sure proper access checks are applied.
// **** Error logged for this next line ****
452 $sql = "SELECT $fields FROM {$table} $where ORDER BY $order"; // <-- Error was logged for this line
453 $sql = db_rewrite_sql($sql);
454 $result = db_query_range($sql, $parameters, $page * 20, 20);
455 return $result;
错误
Table '<REDACTED>_drup1.users' doesn't exist query: SELECT * FROM users ORDER BY created DESC LIMIT 0, 20 in /<REDACTED>/sites/all/modules/services/services.module on line 455.
我的安装中的用户表称为drup_users
。当我将第452行更改为
452 $sql = "SELECT $fields FROM drup_{$table} $where ORDER BY $order";
有效。我有兴趣了解如何获得更持久的解决方案。我多次运行update.php并没有解决这个问题。