Как изменить/добавить переменную добавления в json службы после успешной регистрации.json?
Я могу получить ответ после регистрации с помощью сервиса register.json
Ответ:
{
"uid": "10",
"uri": "http://example.com/apps_api/user/10"
}
Ввод:
{"имя": "умный", "пропуск": "умный", "почта":"[email protected] ", "статус": "1", "роли":[ "3" ] }
Я получаю всю информацию "uri": "http://example.com/apps_api/user/10"
.
Я просто хочу получить в ответ "имя", "почта", "роль".
Не нужно идти снова "uri": "http://example.com/apps_api/user/10"
.
2 answers
Добавьте пользовательский код/модуль для изменения ответа службы, проверьте hook_services_endpoint_response_alter и все другие подобные крючки изменения службы изменяют крючки
Например:
function MODULENAME_services_request_postprocess_alter($controller, $args, &$result) {
if ($controller->callback == '_user_resource_create') {
if ($result->uid) {
$user = user_load($result->uid);
$result->user = $user;
}
}
}
Я так и не смог вернуть исходный текстовый пароль без взлома самих модулей logintoboggan/user (аналогично тому, что показано в моем вопросе).
Тем не менее, я решил ту же задачу - обеспечить немедленный вход при регистрации для вызовов служб/API с помощью модуля services_token_access. Этот код привязывается только к успешной регистрации, а затем объявляет о том, что services_token отвечает на ответ, который теперь является единственным, что сейчас нужно моему клиенту утверждение.
function HOOK_services_request_postprocess_alter($controller, $args, &$result) {
if ( gettype($result) == 'array' && isset($result['uri']) && isset($result['uid'])) { // THIS CONDITION MATCHES THE DEFAULT RESPONSE OF A SUCCESSFUL REGISTRATION.
$user = (object)$result;
$user = user_load($user->uid);
$user = HOOK_services_account_object_alter($user);
$result = array('token'=>$user->services_token, 'user'=>$user);
}
}
function HOOK_services_account_object_alter(&$user) {
$user->services_token = services_token_access_update_token($user->uid, FALSE); // essential for logging in later
$user->specialstuff = 'whatever else you need';
}
(Модуль services_token_access не особенно популярен и едва поддерживается, но работал для меня.)