我有一个小脚本强制我们的Google Apps域上的用户在下次登录时更改密码。我正在使用Zend Framework 1.11.13,但我也在1.12.0上得到了相同的结果。
在Google文档(https://developers.google.com/google-apps/provisioning/#updating_a_user_account)中更新用户的示例似乎已过时或不正确,因为在客户端对象上调用updateUser始终会返回未定义的方法错误。
这是我的代码:
<?php
set_include_path(implode(PATH_SEPARATOR, array(
"/var/www/workspace/extlib/zend-framework/library/",
get_include_path(),
)));
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Gapps');
$client = Zend_Gdata_ClientLogin::getHttpClient("removed", "removed", Zend_Gdata_Gapps::AUTH_SERVICE_NAME);
$gdata = new Zend_Gdata_Gapps($client, 'domain.com');
$userEntry = $gdata->retrieveUser("a.username");
$userEntry->getLogin()->setChangePasswordAtNextLogin(true);
$gdata->updateUser("a.username", $userEntry);
我得到的错误是:
PHP Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 500
Internal Error' in /var/www/workspace/extlib/zend-framework/library/Zend/Gdata/App.php:718
Stack trace:
#0 /var/www/workspace/extlib/zend-framework/library/Zend/Gdata.php(219): Zend_Gdata_App->performHttpRequest('PUT', 'https://apps-ap...', Array, '<atom:entry xml...', 'application/ato...', NULL)
#1 /var/www/workspace/extlib/zend-framework/library/Zend/Gdata/App.php(934): Zend_Gdata->performHttpRequest('PUT', 'https://apps-ap...', Array, '<atom:entry xml...', 'application/ato...')
#2 /var/www/workspace/extlib/zend-framework/library/Zend/Gdata/Gapps.php(272): Zend_Gdata_App->put(Object(Zend_Gdata_Gapps_UserEntry), 'https://apps-ap...', NULL, NULL, Array)
#3 /var/www/workspace/extlib/zend-framework/library/Zend/Gdata/App.php(1025): Zend_Gdata_Gapps->put(Object(Zend_Gdata_Gapps_UserEntry), 'https://apps-ap...', NULL, NULL, Array)
#4 /var/www/workspace/extlib/zend-framework/library/Zend/Gdata/Gapps.php(1005): Zend_ in /var/www/workspace/extlib/zend-framework/library/Zend/Gdata/App.php on line 718
我在这里和那里添加了一些调试代码,用户肯定会加载好,所以它似乎不是权限错误或网络错误,因为初始请求工作正常。当我尝试调用updateUser时出现错误。
任何帮助都会非常感激!
答案 0 :(得分:1)
使用Fiddler作为错误说明,它提供了有关错误的更多说明
答案 1 :(得分:1)
我发现问题实际上是基于权限的。
我创建的用于管理密码更改的用户虽然有权重置密码,却无法为具有超级管理员权限的用户重置密码,因为它只具有管理员权限。
这里可能需要更合适的错误消息吗?