2

我正在使用 Flask-Restless 构建一个 API,它需要一个 API 密钥,该密钥位于AuthorizationHTTP 标头中。

在此处的 Flask-Restless 示例中,用于预处理器:

def check_auth(instance_id=None, **kw):
    # Here, get the current user from the session.
    current_user = ...
    # Next, check if the user is authorized to modify the specified
    # instance of the model.
    if not is_authorized_to_modify(current_user, instance_id):
        raise ProcessingException(message='Not Authorized',
                                  status_code=401)
manager.create_api(Person, preprocessors=dict(GET_SINGLE=[check_auth]))

如何检索函数Authorization中的标头check_auth

我曾尝试访问 Flaskresponse对象,但它None在此函数的范围内。该kw参数也是一个空字典。

4

1 回答 1

7

在正常的 Flask 请求-响应周期中,request上下文在 Flask-Restful 预处理器和后处理器运行时处于活动状态。

因此,使用:

from flask import request, abort

def check_auth(instance_id=None, **kw):
    current_user = None
    auth = request.headers.get('Authorization', '').lower()
    try:
        type_, apikey = auth.split(None, 1)
        if type_ != 'your_api_scheme':
            # invalid Authorization scheme
            ProcessingException(message='Not Authorized',
                                status_code=401)
        current_user = user_for_apikey[apikey]       
    except (ValueError, KeyError):
        # split failures or API key not valid
        ProcessingException(message='Not Authorized',
                            status_code=401)

应该只是工作。

于 2014-05-27T14:31:05.290 回答