【发布时间】:2021-12-29 02:26:34
【问题描述】:
如果标头中未提供令牌字段,我想删除 GET/POST 请求。
目前我使用this code (from GitHub Gist):
def require_basic_auth(handler_class):
def wrap_execute(handler_execute):
def serve_error(handler, status):
handler._transforms = [] # necessary
handler.set_status(status)
handler.finish()
def _execute(self, transforms, *args, **kwargs):
expected_header = self.request.headers.get('X-User-Auth')
if expected_header is None:
return serve_error(self, 403)
kwargs['token'] = expected_header
# Token validation is done in the `post(self, token)` method
return handler_execute(self, transforms, *args, **kwargs)
return _execute
handler_class._execute = wrap_execute(handler_class._execute)
return handler_class
两个问题:
- 它修补了
_method,而且我对操作名称以_开头的方法有点不舒服 - 导致未捕获异常错误:
AttributeError: '_NullFuture' object has no attribute 'add_done_callback'
阅读了一下,我发现.prepare() 方法可能是实现这一点的最佳方法。但是我在.prepare() 中没有找到任何关于如何正确执行此操作的示例。
有人可以给我举个例子吗?
编辑 1
我忘了补充:上面的装饰器还方便地将标头提取到一个token kwarg 以供post(self, token) 方法使用。如果使用prepare(self),我不确定该怎么做。
【问题讨论】: