0

我正在开发一个验证 api 令牌的装饰器,我首先是以一些最小的工作顺序获取装饰器:

def check_token(view_method):
    @wraps(view_method)
    def wrapped_view(*args, **kwargs):
        token = request.args['token']
        if token is None:
            abort(403)
        return view_method(*args, **kwargs)
    return wrapped_view

这种工作方式,即如果提供了令牌,则视图工作,但如果没有提供 400 Bad Request 错误。我想发送一个 403 错误,但我还没有意识到这一点。

它只返回 400 错误有什么问题?我该如何改进?

4

1 回答 1

3

request.args是 a MultiDict,如果请求的密钥在 dict 中不存在,则会引发。request.args['token']在它到达 之前,这里就提出来了abort(403)。几个解决方案是:

## If a 2nd optional argument is provided to dict.get then
## it does not raise if key is not found. Instead returns
## the 2nd argument passed as default.

token = request.args.get('token', None)
    if not token:
        ## Error handling

或者:

if 'token' not in request.args or not request.args['token']
    ## Error handling
于 2012-05-24T16:13:08.830 回答