我正在尝试在通道'test'上进行用户读/写访问一段指定的时间,然后在经过一段时间后删除这些权限。
我试图撤销使用grant并允许令牌通过其ttl自然过期,但没有一个像我期望的那样工作。
在我的服务器上,我有:(已删除密钥)
pnconfig = PNConfiguration()
pnconfig.publish_key = 'pubkey'
pnconfig.subscribe_key = 'subkey'
pnconfig.secret_key = 'skey'
pubnub = PubNub(pnconfig)
pubnub.subscribe().channels('test').with_presence().execute()
pubnub.grant().read(False).write(False).manage(False).ttl(0).sync()
# have also tried
#pubnub.grant().read(False).write(False).manage(False).channels('test').ttl(0).sync()
我稍后使用随机生成的密钥“userkey”授予任意用户权限。即使我使用2的ttl,它的寿命也会超过2分钟。
# ttl(1) should last for 1 minute but instead is instantly expired
# so I am using ttl(2) instead. I would prefer the user have permissions
# revoked after 1 minute
pubnub.grant().read(True).write(True).manage(False).channels('test').auth_keys(userkey).ttl(2).sync()
由于ttl的问题,我试过在它应该到期之后再次调用grant但是无济于事。即使完成此操作,用户仍然可以读/写:
pubnub.grant().read(False).write(False).manage(False).channels('test').auth_keys(userkey).ttl(0).sync()
此后,客户端使用生成的用户密钥作为其身份验证密钥进行连接。这是在javascript中完成的,如下所示:
pubnub = PUBNUB.init({
publish_key : 'pubkey',
subscribe_key : 'subkey',
auth_key : userkey,
leave_on_unload : true
});