Как я могу получить пользователя, используя строку запроса из drupal, используя REST? - PullRequest
4 голосов
/ 21 июня 2011

Что бы я хотел

Я хочу иметь возможность сбросить пароль пользователя, не отправляя его по электронной почте. Мне также нужно сделать это через REST (это для системы киоска).

Так что мне нужно:

  1. Получить пользователя с определенным именем пользователя
  2. Сброс пароля этого пользователя

Как ни старайся, я не могу получить пользователя с именем пользователя.

Проблема

После того, как я вошел в систему с правами администратора через REST, я делаю:

GET on <a href="http://mydomain.com/rest/user?name=user" rel="nofollow">http://mydomain.com/rest/user?name=user</a>.

Согласно документации REST, это должен получить пользователь с именем user.

Я получаю ответ 200, но в теле ничего не возвращается .

Что я пробовал

Получить узел с идентификатором

Как только я вошел в систему как администратор, я могу сделать:

GET on 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

Все это терпит неудачу.

Узлы вместо пользователей

GET на http://mydomain.com/rest/node/1 работает, но http://mydomain.com/rest/node?nid=1 дает мне ответ 200 без тела.

Список всех пользователей

GET on <a href="http://mydomain.com/rest/user/" rel="nofollow">http://mydomain.com/rest/user/</a> также не показывает список всех пользователей. Я снова получаю 200 с пустым телом.

Подробнее

  • Я работаю с установкой Drupal 6.22.
  • Я установил сервисный модуль (3.0 RC1) и REST Server (2.0 beta 1).
  • У меня установлен модуль аутентификации сеанса.
  • Я пробовал описанное выше с включенной аутентификацией сеанса и выключенной.
  • Я включил все ресурсы узла и пользовательские ресурсы для настроенной конечной точки REST.
  • Я пробовал вышеупомянутое с чистыми URL-адресами и без них, и, похоже, ничего не изменилось.

Вопрос

Как получить пользователя с определенным именем пользователя? Что я делаю не так?

Обновление

Я удалил, а затем переустановил модуль Службы, я сделал то же самое с сервером REST. Я также откатил свою версию CTools до последней рекомендованной. Я добавил новый сервис на случай, если он был поврежден. Ничто из того, что я делаю, не работает. Срыв!

Обновление 2

Я нашел проблему, но хотел бы найти более постоянное решение. Оказывается, это была ошибка из-за именования таблиц. Смотрите мой текущий принятый ответ.

Ответы [ 3 ]

3 голосов
/ 25 июня 2011

Извините, это вас расстраивает.Я являюсь сопровождающим модуля служб и действительно работал над документацией, но я подумал, что отвечу здесь, чтобы просто помочь вам двигаться вперед.

Причина, по которой вы не получаете никаких нужных данных, заключается в том, чтоПроходы неверны.

Если вы посмотрите на 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,
  ),

Обратите внимание на третий аргумент, параметры.Вы можете делать всякие забавные вещи с запросом индекса, пока он включен, но вы не пытались это сделать: параметры [имя] = пользователь Пример ниже

Когда я делаю запрос к http://test/api/user?parameters[name]=gdsfgsdfgsdfg&fields=name,uid Мне возвращают

[
 {
  "name":"gdsfgsdfgsdfg",
  "uid":"36",
  "uri":"http:\/\/test\/api\/user\/36"
 }
]

Обратите внимание, я также добавил несколько полей, uid и name.Очевидно, что они являются необязательными, но они показывают мощь индексного запроса.То же относится и к узлам.

Надеюсь, это поможет.Fetcher

1 голос
/ 25 июня 2011

Я нашел проблему. Это ошибка / ошибка в модуле Службы в моей настройке.

Из 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 несколько раз, но это не помогло.

1 голос
/ 21 июня 2011

Попробуйте что-то вроде:

GET on http://mydomain.com/rest/user?parameters[name]=admin

Это сработало для меня в Drupal7. Не уверен, будет ли это так же для 6. Но у меня также не было проблем с получением индекса всех пользователей, использующих GET на http://mydomain.com/rest/user/

...