如何在使用Autobahn Wamp Cra时使用延迟返回认证密钥?

2 投票
1 回答
591 浏览
提问于 2025-04-17 16:49

我正在使用 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的延迟认证在这个版本上运行得很好。

撰写回答