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

MySQL中sign_up与applications表关联的求职申请鉴权异常问题

问题排查与修复方案

核心问题分析

当前逻辑的主要问题有两点:

  1. 用户ID获取方式错误:get_user_id_from_request从请求头full_name拿用户名,但表单提交时,用户名通常放在表单数据(request.form)里而非请求头,导致注册用户也拿不到user_id,返回None。
  2. 校验逻辑顺序颠倒:先调用insert_application再判断结果,而非先校验user_id是否有效,导致无效用户和有效用户的插入失败路径混在一起。

修复步骤

1. 修正用户ID获取逻辑

如果用户名是通过表单提交的(比如表单字段叫username),修改get_user_id_from_request从表单数据中获取:

def get_user_id_from_request():
    """从请求的表单数据中获取用户ID"""
    # 按实际表单字段名调整,这里假设字段是username
    username = request.form.get("username")
    if username:
        with engine.connect() as conn:
            query = text("SELECT user_id FROM sign_up WHERE username = :username")
            result = conn.execute(query, {'username': username}).fetchone()
            if result:
                return result[0]  # 找到则返回user_id
    return None

如果确实需要从请求头获取,需确保前端提交请求时正确设置full_name请求头字段。

2. 调整API端点的校验逻辑

先校验user_id是否存在,再执行插入操作,明确区分不同场景:

@app.route("/job/<id>/apply", methods=["post"])
def apply_job(id):
    data = request.form
    job = get_job_by_id(id)
    user_id = get_user_id_from_request()

    # 先校验用户是否已注册
    if not user_id:
        return jsonify(None, "User not authenticated or signed up")
    
    # 用户已注册,执行申请插入操作
    if insert_application(user_id, id, data):
        return render_template("app_submitted.html", application=data, job=job)
    else:
        return jsonify(user_id, "Failed to submit application")

3. 确保insert_application函数逻辑正确

该函数需正确处理user_id非空的情况,插入成功返回True,失败(如数据库错误)返回False,示例实现参考:

def insert_application(user_id, job_id, data):
    if not user_id or not job_id:
        return False
    try:
        with engine.connect() as conn:
            # 根据applications表实际字段调整插入语句
            query = text("""
                INSERT INTO applications (user_id, job_id, applicant_name, applicant_email)
                VALUES (:user_id, :job_id, :name, :email)
            """)
            conn.execute(query, {
                'user_id': user_id,
                'job_id': job_id,
                'name': data.get('applicant_name'),
                'email': data.get('applicant_email')
                # 其他表单字段按需添加
            })
            conn.commit()
            return True
    except Exception as e:
        print(f"Insert error: {e}")
        return False

额外调试建议

  • 打印user_id的值,确认注册用户的ID是否被正确获取。
  • 检查前端表单提交的字段名,确保和后端获取的字段名完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:45:18