使用Python调用DELETE API失败:提示用户未登录
问题诊断与解决方案
核心问题:未使用MFA验证后的有效Token
大多数系统在登录获取初始Token后,完成MFA验证会生成新的、具备完整权限的会话Token,而你当前仍在使用登录阶段的旧Token发起删除请求,这就是导致"User not logged in"的主要原因。
具体修复步骤
捕获MFA验证响应中的新Token
在MFA验证请求后,从响应中提取更新后的JWT Token,替换原来的旧Token:# MFA验证请求后添加以下代码 mfa_response = requests.post(mfa_verify_url, json=todo, headers={'Authorization': 'Token '+token}) # 提取MFA验证后的新Token new_token = mfa_response.json().get('jwt_token').get('token')使用新Token发起删除请求
删除请求中替换为新获取的Token:headers = {'Authorization': f'Token {new_token}'} response = requests.delete(tenant_delete_url, headers=headers)可选:保持会话一致性
复用同一个requests会话,避免Cookie或会话状态丢失:# 初始化会话 session = requests.session() session.trust_env = True # 登录请求用同一个会话 response = session.post(api_url, json=todo) token = response.json().get('jwt_token').get('token') # MFA验证也用同一个会话 mfa_response = session.post(mfa_verify_url, json=todo, headers={'Authorization': 'Token '+token}) new_token = mfa_response.json().get('jwt_token').get('token') # 删除请求复用会话和新Token headers = {'Authorization': f'Token {new_token}'} response = session.delete(tenant_delete_url, headers=headers)
其他排查点
- 检查MFA验证请求的响应状态码(比如
print(mfa_response.status_code)),确认MFA验证是否成功完成(通常是200或201)。 - 确认API文档中Authorization头的格式是否为
Token {token},部分系统可能要求Bearer {token},如果是这种情况,需要统一修改头格式。
内容的提问来源于stack exchange,提问作者Pinakin Chaubal
相关产品推荐
相关产品推荐

