gpt4 book ai didi

http - 在 Flask 请求中更改 header 的最佳做法是什么?

转载 作者:行者123 更新时间:2023-12-01 15:39:37 28 4
gpt4 key购买 nike

我有一个 Flask 应用程序,它使用自定义装饰器来验证在 HTTP header 属性中传递的 AWS Cognito 登录 token 。该过程包括刷新 token (这超出了本问题的范围)。获得刷新的 token 后,我想更新 header 属性以包含刷新的 token 并退出。自 Flask/Werkzeug request.headers属性是不可变的,我无法通过正常方式更新它。

如何在此装饰器的上下文中更新标题?有没有我没有想到的更好的方法?

下面是一些演示该问题的示例代码:

def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
token = request.headers.get('X-MyApp-Auth')
if not token:
return redirect(url_for('login', next=request.url))
# Test for expired token (pseudocode)
if expired(token):
# Refresh the token (pseudocode)
new_token = refresh(refresh_token)
# This is the part where the immutability gets me stuck
request.headers.set('X-MyApp-Auth', new_token)
return f(*args, **kwargs)
return decorated_function

最佳答案

此示例将 Flask 应用程序包装在自定义 WSGI 中间件中,该中间件在 Flask 请求处理之前修改 WSGI 环境:

from flask import Flask, request, jsonify


class InterceptRequestMiddleware:
def __init__(self, wsgi_app):
self.wsgi_app = wsgi_app

def __call__(self, environ, start_response):
environ['HTTP_USER_AGENT'] = 'foobar'
return self.wsgi_app(environ, start_response)


app = Flask(__name__)
app.wsgi_app = InterceptRequestMiddleware(app.wsgi_app)


@app.route('/')
def index():
return jsonify({'headers': {k: v for k, v in request.headers}})


if __name__ == '__main__':
app.run(debug=True)

链接:
  • Flask.wsgi_app documentation
  • http://ivory.idyll.org/articles/wsgi-intro/what-is-wsgi.html

  • enter image description here

    关于http - 在 Flask 请求中更改 header 的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60566143/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com