我正试图将pubnub与他们的访问管理器一起使用,以授权某些用户访问特定频道,然后在授予用户读/写权限后向该频道发布消息。在授予用户访问权限后,我一定是对publish()调用出错了。下面代码的第一部分返回grant()的成功响应,但publish()调用的结果是:
致命错误:调用第48行/home/dayfv98/public_html/mobile/pubtest.php中的未定义方法访问::publish()
这是我的代码:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require('pubnub.php');
require('pam.php');
$chat_entry = addslashes(trim($_POST['chat_entry']));
// CONNECT TO ACCESS MANAGER
$manager = new access(
"MY_PUB_KEY...not included for security",
"MY_SUB_KEY...not included for security",
"MY_SEC_KEY...not included for security"
);
## Grant User Access
print_r($manager->grant(
"chat", // CHANNEL
"44444", // STRING (AUTH KEY)
true, // READ
true, // WRITE
0 // TTL in MINUTES
));
$manager->publish(array(
'channel' => 'chat', ## REQUIRED Channel to Send
'message' => $chat_entry
));
?>
访问管理器库不用于执行访问管理器范围之外的任何操作。它仅用于拨款、撤销和审计。
您需要使用普通的PubNub-sdk,但在构建PubNub对象时,请提供您之前授予的auth令牌。
**编辑:**PHP SDK现在似乎与Access Manager有一些问题。为了解决这个问题,我做了一些小的修补程序修改,并将它们纳入了要点中,但请关注github上的官方存储库,以获取新版本:https://gist.github.com/keyosk/9c86b981948a3cf7f378
例如,要使用您在上面的示例中授予的auth令牌,您可以这样做:
$pubnub = new Pubnub(array(
'publish_key' => 'MY_PUB_KEY',
'subscribe_key' => 'MY_SUB_KEY',
'auth_token' => '44444',
));
$pubnub->publish(array(
'channel' => 'chat',
'message' => $chat_entry
));