python - 我可以在 @app.before_request 中为我的 flask 请求对象附加一个值并将其转发给端点 View 函数吗?

标签 python rest flask

我正在用 python 开发一些基本的 REST API。除了一些不安全的请求(如登录和注册)之外,我希望所有请求的 header 中都有一个授权 token 。我正在验证 @app.before_request 中的 token ,然后我想将解码后的有效负载传递给相应的端点 View 函数。但是,我不会将解码后的信息附加到请求对象,因为我收到“类型错误:‘请求’对象不支持项目分配”。

@app.before_request
def before_request():
    print(request.endpoint)
    if request.endpoint=="register" or request.endpoint=="login":
        pass
    else:
        auth_header = request.headers.get('Authorization')
        if auth_header:
            auth_token = auth_header.split(" ")[1]
            token=decode_auth_token(auth_token)
            request["token"]=token
        else:
            return jsonify({"result":"","error":"No token present in header !"})

我认为这个实现就像一个身份验证过滤器,所有请求都通过这个过滤器。我可以在这一层本身删除恶意请求,而且,我可以获取网络中间件所需的用户特定信息。

最佳答案

我有一个类似的用例(实际上出奇地相似)。我通过在请求对象中设置一个自定义属性来解决它,就像你的方法一样,尽管我没有使用直接赋值(即 request["token"]=token),而是使用了 setattr (请求,“ token ”, token )

我从一个 bottle 插件那里得到了提示,它做的事情非常相似: https://github.com/agile4you/bottle-jwt/blob/master/bottle_jwt/auth.py#L258

您甚至可能想尝试一下,或使用其他插件来进一步改进您的应用程序。

关于python - 我可以在 @app.before_request 中为我的 flask 请求对象附加一个值并将其转发给端点 View 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53108394/

相关文章:

java - 当没有创建资源时,我应该为 POST 返回什么 HTTP 状态代码?

javascript - 使用选定值中的数组填充 Kendo DropDownList

python - Flask 中的简单例份验证在 Apache 下不起作用

python - 自定义脚本的 Zabbix 发现规则 : need any advices

python - numpy:比较两个日期值返回 TypeError: '>=' 和 'int' 的实例之间不支持 'datetime.datetime'

rest - 使用 MarkLogic REST API 进行文档版本控制

python - 寻找更好的方法来处理 python 中的更新请求

python - SQLalchemy - 迭代所有映射表

python - 谷歌应用引擎 : Cursor Versus Offset

python - 使用 Scipy 的多处理大卷积没有加速