Python 3.x eve U.R.A.';我不能与HMAC合作

Python 3.x eve U.R.A.';我不能与HMAC合作,python-3.x,eve,Python 3.x,Eve,run.py: settings.py: class HMACAuth(HMACAuth): def check_auth(self, userid, hmac_hash, headers, data, allowed_roles, resource, method): accounts = app.data.driver.db['accounts'] user = accounts.find_one({'username': userid})

run.py:

settings.py:

class HMACAuth(HMACAuth):
    def check_auth(self, userid, hmac_hash, headers, data, allowed_roles, resource, method):
        accounts = app.data.driver.db['accounts']
        user = accounts.find_one({'username': userid})
        if user and '_id' in user:
            secret_key = user['secret_key']
            self.set_request_auth_value(user['_id'])

        # in this implementation we only hash request data, ignoring the headers.
        hm = hmac.new(bytes(secret_key, encoding='utf-8'), data, sha1).digest()

        return user and base64.b64encode(hm).decode() == hmac_hash
我的问题是,当每个用户向
localhost:5000/VMs

使用
TokenAuth
身份验证,这不会发生。
我缺少什么??


PS:Python 3.3.5上的Eve 0.5-dev

由于基于令牌的身份验证一切正常,而且除了自定义类本身之外,这两种方法之间没有什么真正的区别,因此我将研究它的行为


首先,我会检查文档是否使用正确的
user\u id
值存储,可能是使用mongo shell。如果没有,请确保正在检查的文档已保存,并且自定义HMAC类处于活动状态。添加一个断点并跟踪您的代码,简单的事情就是这样。希望这有帮助

这很奇怪!所创建用户的
\u id
544ff79fe555c028869380f7
,而所创建虚拟机的
\u id
544ff79fe555c028869380f8
544ff79fe555c028869380f9
。这怎么可能呢O如果我写入
print(user[''u id'])
一切正常,但它存储了不同的值:/问题是
user\u id
字段不是用HMACAuth类创建的。我不明白为什么会出现这种奇怪的行为……我用
self.get\u request\u auth\u value()
检查了一下,结果发现值是正确的:(那么为什么它不存储在数据库中?-)-
vms = {
    'additional_lookup': {
        'url': 'regex("[\w]+")',
        'field': 'name',
    },
    'cache_control': '',
    'cache_expires': 0,
    'public_methods': [],
    'public_item_methods': [],
    'resource_methods': ['GET', 'POST'],
    'item_methods': ['GET','PATCH','DELETE'],
    'auth_field': 'user_id',
    'schema': vm_schema,
}