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

React跨域请求Flask服务器时Cookie无法携带的问题求助

React跨域请求Flask服务器时Cookie无法携带的问题求助

我最近在做本地开发时遇到了一个跨域Cookie携带的问题,折腾了好几天都没搞定,真心求大家帮忙看看!

场景说明

我在本地分别跑了React项目(端口5173)和Flask后端,登录接口已经能成功在浏览器设置token Cookie,但当React发送GET请求到Flask的/user接口时,后端始终拿不到这个Cookie里的token值。

React请求代码

export async function fetchUser() {
    try {
        const res = await fetch(`${BASE_URL}/user`, {
            method: 'GET',
            credentials: 'include', 
        });
        if (res.ok) {
            const data = await res.json();
            return data.user; // 按实际返回格式处理
        } else {
            const data = await res.json();
            console.log(data)
            return null
        }
    } catch (error) {
        console.error(error);
        return null
    }
}

Flask后端代码

from flask import Flask, request, jsonify, make_response
from functools import wraps

app = Flask(__name__)
CORS(app, supports_credentials=True, resources={r"/*": {"origins": ['http://localhost:5173']}})

def token_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        token = request.cookies.get('token', 0)  # 从Cookie获取token
        print(token)
        if token is 0:
            return jsonify({'message': 'Token is missing!'}), 401
        result = enc.validate_token(token)
        if not result['success']:
            return jsonify({'message': result['message']}), 401
        identity = result['identity']
        return f(identity, *args, **kwargs)
    return decorated

@app.route("/user", methods=['GET'])
@token_required
def get_user(current_user):
    if not current_user:
        return jsonify({'error': 'User not found!'}), 404
    return current_user

@app.route("/login", methods=['POST'])
def login():
    data = request.get_json()
    username = data['username']
    password = data['password']
    login = au.handle_login(username, password)
    if login['success']:
        response = make_response(jsonify({ 'success': login['success'], 'message': login['message'] }), 200)
        response.set_cookie(
            "token",
            value=login['token'],
            expires=login['expires'],
            max_age=login['max_age'],
            httponly=True,    # 禁止JavaScript访问
            secure=False,      # 生产环境要设为TRUE,仅HTTPS传输
            samesite="Lax" # STRICT模式可更好防护CSRF
        )
        return response, 200
    return jsonify(login), 401

目前遇到的问题

登录接口已经成功在浏览器的应用Cookie面板里设置了token Cookie,能看到它的键值都是正确的。我已经在React请求里加了credentials: 'include',Flask的CORS也配置了supports_credentials=True,并且指定了允许的源是React的本地地址,但在/user接口里,request.cookies.get('token')始终返回None,导致接口一直返回"Token is missing!"的错误。

我翻来覆去检查了好多遍配置,感觉哪里都没毛病,但就是解决不了这个问题,有没有大佬能帮我排查一下可能的原因呀?

备注:内容来源于stack exchange,提问作者gooooodmorning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:32:59