You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python HTTP服务端sqlite3存储JWT及返回登录用户姓名实现问题

实现方案

1. 服务端代码修改

核心修改点:

  • 登录验证时同步查询用户姓名字段
  • 生成JWT后执行UPDATE语句并提交事务(之前更新不生效大概率是没执行commit操作)
  • 结构化返回token和用户姓名给客户端

首先在服务端代码开头导入json模块:

import json

然后替换原do_POST方法为以下代码:

def do_POST(self):
    self.log_message('Incoming POST request...')
    data_passed = parse_qs(self.path[2:])

    try:
        # 查询时同时取出姓名字段
        data = cursor.execute("SELECT account, name_lastname FROM Users WHERE account=? and password=?",
                              (data_passed['account'][0],
                               data_passed['password'][0]), )
        user_info = data.fetchone()
        if not user_info:
            self.send_response_to_client(400, 'Invalid login')
        else:
            name_lastname = user_info[1]
            encoded = jwt.encode({'account': data_passed['account'][0],
                                  'exp': datetime.utcnow() +
                                         timedelta(seconds=45)}, 'secret',
                                 algorithm='HS256')

            # 执行token更新,必须加commit才能将修改持久化到数据库
            cursor.execute("UPDATE Users SET token=? WHERE account=?", (encoded, data_passed['account'][0]))
            conn.commit()

            # 结构化返回姓名和token
            resp = json.dumps({
                "code": 200,
                "name": name_lastname,
                "token": encoded
            })
            self.send_response_to_client(200, resp)

    except KeyError:
        self.send_response_to_client(404, 'Incorrect parameters provided')
        self.log_message("Incorrect parameters provided")

2. 客户端代码修改

核心修改点:解析服务端返回的JSON结构,提取姓名字段输出欢迎语
替换原客户端代码为以下内容:

import requests
import json

account = input("Enter your account: ")
password = input("Enter your password: ")

r = requests.post("http://127.0.0.1:8079/", params={'account': account, 'password': password})
print("Request method: POST,  \nResponse status_code: {}".format(r.status_code))
if r.status_code == 200:
    resp_data = r.json()
    print(f"Welcome {resp_data['name']}")
    print(f"Token (valid for 45 sec): {resp_data['token']}")
else:
    print(f"Response data: {r.text}")

注意事项

  • 全局Sqlite连接仅适合本地测试使用,生产环境建议每次请求创建连接或者使用连接池
  • JWT签名密钥不要硬编码在代码中,建议通过环境变量配置

内容的提问来源于stack exchange,提问作者masterdeki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:30:01