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

使用Flask+Flask-PyMongo开发登录接口调用时报500错误如何解决

问题根源

你怀疑的hashed = user.password这行确实是核心问题:

  • Flask-PyMongo的find_one()返回的是Python字典,不是自定义类对象,不能用.属性访问的方式取值,必须用字典的键索引写法user['password']
  • 这行代码执行时会抛出AttributeError,异常没有被捕获,导致视图函数中途终止,没有返回任何响应,才触发了你看到的did not return a valid response报错。

修复方案

1. 修正密码字段取值写法

把hashed = user.password改成hashed = user['password']

2. 可选:增加异常捕获逻辑(提升鲁棒性)

避免其他意外情况导致无返回的问题,可以给核心逻辑加异常捕获,兜底返回错误响应。

修复后完整代码参考

def login():
    try:
        email = request.form['email']
        password = request.form['password']

        # Find user record by email
        user = db.user.find_one({'email': email})

        # If user not found return message
        if not user:
            return jsonify(message='We cannot find you, please sign up'), 404

        # 修正字典取值写法
        hashed = user['password']
        test = pbkdf2_sha256.verify(password, hashed)
        # Returns on success
        if test:
            access_token = create_access_token(identity=email)
            return jsonify(message='Login Successful', access_token=access_token), 202
        else:
            return jsonify(message='Password incorrect'), 403
    except Exception as e:
        # 开发阶段可以打印错误排查,生产环境可以记录日志
        print(f"登录接口错误:{str(e)}")
        return jsonify(message='Server internal error'), 500

额外优化提示

原来的用户不存在分支没有指定状态码,默认会返回200,不符合HTTP语义,上面的修复代码里加了404状态码,你可以根据自己的业务需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:18:03