request.headers['token']
我在烧瓶中获得了这样的令牌值。但这会返回一个关键错误,如下所示:
api | return _unicodify_header_value(self.environ['HTTP_' + key])
api | KeyError: 'HTTP_TOKEN'
以上部分来自Werkzueg的 datastructures.py。 客户端:
...
retries = Retry(total=total,
backoff_factor=backoff_factor,
status_forcelist=[429, 500, 502, 503, 504])
http = requests.Session()
http.mount("https://",
TimeoutHTTPAdapter(max_retries=retries, timeout=timeout))
http.mount("http://",
TimeoutHTTPAdapter(max_retries=retries, timeout=timeout))
self.http = http
...
...
def add_regular_user_request(self,
user_name=None,
password=None,
email=None):
endpoint = "/api/regularuser"
api_url_complete = self.api_url + endpoint
params = {}
if user_name is None or password is None or email is None:
raise IncompleteParams
params['user_name'] = user_name
params['password'] = password
params['email'] = email
result = self.http.post(api_url_complete,
data=params,
headers=self.headers)
...
...
可能有什么问题? 任何其他细节请告诉我。
首先,检查以确认您确实将 jwt 授权令牌传递给您的烧瓶应用程序。在 Chrome 开发工具等工具中,检查您的前端代码请求,以确认您确实在传递授权令牌。或者使用邮递员为您尝试测试的特定 Flask 蓝图路由手动设置所有身份验证令牌标头。
其次,确认在路由开始处理请求之前,确认您没有尝试过早访问 jwt 令牌。换句话说,您是否有任何@application.before_request
处理程序试图拦截或处理 jwt 令牌?这些处理程序应该位于您在最顶层描述 Flask 应用程序的任何位置(启动 Flask 应用程序的东西(。
就我而言,我的错误/用例是尝试在路由处理过程中过早访问 jwt 身份验证令牌的结果。您的原因可能与我的用例不同,但重大更改可能仍然相同。尝试从代码的@application.before_request
处理程序中注释掉执行类似get_jwt_identity操作的代码部分:
@application.before_request
def before_request_handler():
g.session_id = uuid4()
g.user_id = get_jwt_identity() #TODO: comment out this entire line
如果不详细了解您的更大应用程序上下文,我就无法提供特定的解决方案,但这绝对是导致我问题的原因。在路由设置我的Authorization
jwt 令牌之前,我正在访问 jwt 令牌。就我而言,我不需要Authorization
jwt 令牌即可成功将user_id设置为全局会话变量,并且路由处理程序能够在以后成功设置授权令牌,因此从技术上讲,这里没有任何损坏,除了烦人的虚假错误消息。
更新: 确认将我的get_jwt_identity()
函数调用移出before_request
处理程序并降低到存储库类型服务中解决了我的错误。我不再看到该错误。