我在服务器端实现了PAM,为此我尝试使用不同的授权密钥访问个人客户端。写入访问按预期工作,但即使我授予他们读取访问权限,客户端也不会收到任何消息。以下是我如何初始化我的pubnub配置;pubnub.grant()读取权限在PUBNUB中不起作用PAM
pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'sub-c-...'
pnconfig.publish_key = 'pub-c-...'
pnconfig.secret_key = "sec-c-..."
pnconfig.uuid = "server"
channel = "my_channel"
pubnub = PubNub(pnconfig)
def my_publish_callback(envelope, status):
#print 'status:', status.original_response
pass
class MySubscribeCallback(SubscribeCallback):
def status(self, pubnub, status):
if status.is_error():
print("handle permissions here ERROR")
if status.category == PNStatusCategory.PNAccessDeniedCategory:
print("handle permissions here")
def message(self, pubnub, message):
global server_UUID
d = message.message
if type(d) == dict:
if (d.get('server')):
pass
else:
print 'dict>>',d
else:
print 'got>>', d
pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels(channel).with_presence().execute()
def input_take():
while 1:
data = raw_input("Send:")
if "yes" in data:
grant(True, True, "robot")
elif "no" in data:
grant(False, False, "robot")
def send():
c = 0
while 1:
print 'sending:', c
time.sleep(1.5)
c += 1
pubnub.publish().channel(channel).message({pubnub.uuid:str(c)}).async(my_publish_callback)
def grant(read, write, auth):
v=pubnub.grant()\
.read(read)\
.write(write)\
.channels('my_channel')\
.auth_keys(auth)\
.ttl(60)\
.sync()
#print v.result
for key, value in v.status.original_response.iteritems():
print key ,":" , value
pass
T = Thread(target=input_take)
T.start()
S = Thread(target=send)
S.start()
运行pubnub.grant()函数时,状态响应为200。
status : 200
message : Success
payload : {u'auths': {u'robot': {u'r': 1, u'm': 0, u'w': 1}}, u'subscribe_key': u'sub-c-...', u'ttl': 60, u'channel': u'my_channel', u'level': u'user'}
service : Access Manager
但仍然没有客户端能够收到任何消息。我正在使用pubnub调试控制台进行客户端测试,并设置与服务器“robot”中相同的授权密钥。我错过了什么吗?或者我需要在PAM中配置一些东西?我正在使用PubNub版本4.0.12。
我观察过读访问的行为。当授予对False的读取访问权时,实际上是从该特定频道取消订阅客户端。因此,如果您想要再次获得读取权限,则客户端需要再次订阅该频道才能收听消息。 –
我之所以不查看收到的邮件是因为客户端自动取消订阅。所以当我再次订阅时,我可以成功读取消息。 –