【发布时间】:2010-06-06 23:48:10
【问题描述】:
我在 1 个 drupal 站点上有一段代码,用于在多站点设置中创建另一个 drupal 站点的节点。 看起来我得到了 sessionid 并且登录得很好,但是在尝试创建“页面”节点时,我得到“访问被拒绝”。在服务-> 设置下,我有“密钥验证”,“使用密钥”未选中,“使用 sessid”已选中。我对登录用户的agev 权限:“创建页面内容”、“管理服务”等... 以下是我的代码:
<p>Test Page 1</p>
<? $url = 'http://drupal2.dev/xmlrpc.php'; ?>
<?
$conn = xmlrpc($url, 'system.connect');
print_r($conn);
?>
<p>--</p>
<?
$login = xmlrpc($url, 'user.login', $conn['sessid'], 'superuser_name', 'superuser_password');
print_r($login);
?>
<p>--</p>
<?
$data=array('type'=>'page', 'title'=>'Test', 'body'=>'test');
$data_s=serialize($data);
$result = xmlrpc($url, 'node.save', $login['sessid'], $data_s);
echo $result;
//echo $data_s;
?>
<?
if($error = xmlrpc_error()){
if($error->code > 0){
$error->message = t('Outgoing HTTP request failed because the socket could not be opened.');
}
drupal_set_message(t('Operation failed because the remote site gave an error: %message (@code).',
array(
'%message' => $error->message,
'@code' => $error->code
)
)
);
}
?>
这个脚本的输出是:
Array ( [sessid] => 9eebdde9bf0bfd9610cc2f03af131a9c [user] => Array ( [uid] => 0 [hostname] => ::1 [roles] => Array ( [1] => anonymous user ) [session] => [cache] => 0 ) )
--
Array ( [sessid] => c0ca4c599e41e97e7a7ceb43ee43249e [user] => Array ( [uid] => 1 [name] => eric [pass] => 13583b155536098b98df41bb69fcc53 [mail] => email@gmail.com [mode] => 0 [sort] => 0 [threshold] => 0 [theme] => [signature] => [signature_format] => 0 [created] => 1271813934 [access] => 1275867734 [login] => 1275868794 [status] => 1 [timezone] => [language] => [picture] => [init] => email@gmail.com [data] => a:0:{} [roles] => Array ( [2] => authenticated user ) ) )
--
访问被拒绝
【问题讨论】:
-
您是否在接收网站上为服务模块设置了适当的权限?节点服务开启了吗?
-
我正在运行 Services 6.x-2.2 和 XMLRPC Server 6.x-2.2
-
对于使用xmlrpc登录的用户,他拥有所有权限。对于“服务”-> 管理服务对于“node_service”-> 加载节点数据
-
嗯,这是 UID 1,它应该取代任何权限。奇怪。
-
更新:我删除了序列化,只是将它作为一个数组传递并且它可以工作,但是它将节点发布为“匿名”,这是错误的,因为我使用的是在我做的时候创建的 sessid user.login 调用。
标签: drupal xml-rpc access-denied drupal-nodes drupal-services