2

我正在继承WampCraServerProtocol(来自 Autobahn Python)并覆盖getAuthSecret. 我知道现在我可以从该方法返回一个 deferred,但是,在做一个简单的测试时:

def getAuthSecret(self, authKey):        
    deferred = Deferred()
    deferred.callback("secret")
    return deferred

...我收到以下错误WampCraClientProtocol

Authentication Error! http://api.wamp.ws/error#generic Deferred instance has no attribute '__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

这让我更加困惑。我只想知道从该方法返回延迟的正确方法。(我应该注意,如果返回一个简单的字符串,一切都会完美运行)。谢谢。

4

1 回答 1

1

这对我有用:

https://github.com/tavendo/AutobahnPython/blob/master/examples/wamp/authentication/server.py#L72

您使用的是什么 AutobahnPython 版本?

更新:

v0.5.9 有一个关于基于延迟的身份验证的错误(请参阅下面的评论)。它已在 v0.5.14 上修复。Wamp Cra 基于延迟的身份验证在该版本上运行良好。

于 2013-02-24T17:42:19.703 回答