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

Flask RESTAPI无鉴权login接口返回401 UNAUTHORIZED问题求助

问题排查解决步骤
  • 排查点1:是否注册了全局鉴权钩子拦截了请求
    你代码中导入了check_token工具,大概率是通过before_request注册为全局请求拦截逻辑,默认会拦截所有请求:

    1. 浏览器的CORS预检OPTIONS请求本身不会携带任何认证信息,会直接被鉴权逻辑拦截返回401,导致浏览器判定CORS未通过
    2. 未排除/login路径的鉴权,登录请求会被全局校验逻辑拦截
      修复方案:调整全局鉴权逻辑,放行特殊请求
    @app.before_request
    def auth_check():
        # 放行OPTIONS预检请求
        if request.method == "OPTIONS":
            return make_response("", 200)
        # 放行登录接口
        if request.path == "/login":
            return
        # 剩余请求走正常token校验逻辑
        check_token()
    
  • 排查点2:前端请求强制携带了无效Authorization头
    你封装的sendServer方法不管请求场景都强制添加Authorization头,登录时还未获取有效token,你大概率传入了undefined/null/空字符串,后端只要检测到Authorization头存在但格式无效就会直接返回401。
    修复方案:调整请求封装逻辑,仅当存在有效token时才添加认证头

export const sendServer = (url, token, method, data, callback) => {
    let newUrl = `http://localhost:5000/${url}`
    const headers = {}
    // 仅token非空时添加认证头
    if (token && typeof token === 'string' && token.trim()) {
        headers['Authorization'] = token
    }
    axios({
        method: method.toUpperCase(),
        url: newUrl,
        data: data,
        headers: headers
    })
    .then(response => callback({ success: true, data: response.data }))
    .catch(error => callback({ success: false, error: error.toJSON() }))
}
  • 排查点3:CORS配置未显式放行自定义认证头
    默认的CORS(app)配置可能没有放开Authorization自定义头的访问权限,导致预检请求被拦截。
    修复方案:显式配置CORS允许的头信息
CORS(app, supports_credentials=True, allow_headers=["Content-Type", "Authorization"])
  • 排查点4:登录接口内部逻辑包含多余鉴权
    检查你未贴全的Authenticate.post方法内部代码,确认没有调用check_token或者其他Authorization头校验的逻辑,避免接口自身拦截了无认证的登录请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:39:02