如何在使用Autobahn Wamp Cra时使用延迟返回认证密钥?
我正在使用 WampCraServerProtocol
(来自Autobahn Python)进行子类化,并重写 getAuthSecret
方法。我明白现在可以从这个方法返回一个延迟对象(deferred),但是在做一个简单测试时:
def getAuthSecret(self, authKey):
deferred = Deferred()
deferred.callback("secret")
return deferred
... 我在我的 WampCraClientProtocol
上遇到了以下错误:
认证错误!http://api.wamp.ws/error#generic 延迟实例没有属性 '__len__' None
好吧,这个错误本身就让人困惑。返回的这个延迟对象 getAuthSecret
有什么特别要求吗?
接下来,基于这个错误,我给我返回的延迟对象添加了一个(简单的)len 方法:
def getAuthSecret(self, authKey):
#secret_deferred = self.factory.get_secret(authKey)
deferred = Deferred()
deferred.__len__ = lambda: 1
deferred.callback("secret")
return deferred
... 在这种情况下,我得到了:
Authentication Error! http://api.wamp.ws/error#generic unsupported operand type(s) for +: 'instance' and 'str' None
这让我更加困惑了。我只想知道从这个方法返回一个延迟对象的正确方式是什么。(我应该提到,如果我返回一个普通的简单字符串,一切都能正常工作)。谢谢。
1 个回答
1
这个方法对我有效:
https://github.com/tavendo/AutobahnPython/blob/master/examples/wamp/authentication/server.py#L72
你使用的AutobahnPython是什么版本?
更新:
v0.5.9版本有一个关于延迟认证的bug(可以查看下面的评论)。在v0.5.14版本中这个问题已经修复了。Wamp Cra的延迟认证在这个版本上运行得很好。