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

Django+React登出接口403 Forbidden问题排查求助

排查Django+React会话认证登出403 Forbidden问题

核心原因推测:CSRF信任来源未配置

使用绝对路径跨域调用登出接口时,Django的CSRF验证会检查请求来源是否可信;而代理模式下请求被转发为同源请求,绕开了这一步校验。其他接口正常可能是因为登录时的CSRF Token逻辑在代理模式下完成,绝对路径调用时未通过信任校验。

具体排查与修复步骤

1. 添加CSRF_TRUSTED_ORIGINS配置

在Django的settings.py中添加以下配置,明确信任前端域名:

CSRF_TRUSTED_ORIGINS = [
    'http://localhost:3000',
    'http://127.0.0.1:3000',
]

该配置用于告知Django,来自这些域名的跨域请求是可信的,允许通过CSRF验证(Django 3.1+版本支持)。

2. 为登出视图添加Session认证类

你的登出视图仅设置了权限类,未明确指定会话认证类,REST框架可能无法正确识别请求中的会话信息。修改视图代码:

@api_view(['POST'])
@authentication_classes([SessionAuthentication])  # 添加该行
@permission_classes([AllowAny])
def logout_view(request):
    logout(request)
    return Response(status=status.HTTP_200_OK)

明确指定认证类后,REST框架会正确处理请求携带的session cookie,确保logout()函数能正常销毁会话。

3. 验证CSRF Token获取逻辑

确保React中获取的CSRF Token来自Django设置的cookie,检查你的Token获取代码是否正确:

const getCookie = (name) => {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        const cookies = document.cookie.split(';');
        for (let i = 0; i < cookies.length; i++) {
            const cookie = cookies[i].trim();
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
};
const csrftoken = getCookie('csrftoken');

同时确认请求中credentials: 'include'已正确设置,保证跨域请求时携带session和CSRF cookie。

4. 开启CSRF调试日志定位问题

若上述步骤无效,可在Django的settings.py中开启CSRF调试日志,查看具体报错:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.security.csrf': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
}

重启服务后调用登出接口,通过控制台输出的日志进一步定位CSRF验证失败的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:05:37