Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用React fetch调用Dango REST以获得403响应_Reactjs_Django Rest Framework_Fetch - Fatal编程技术网

Reactjs 使用React fetch调用Dango REST以获得403响应

Reactjs 使用React fetch调用Dango REST以获得403响应,reactjs,django-rest-framework,fetch,Reactjs,Django Rest Framework,Fetch,我正在托管一个React应用程序(),希望通过调用对Django REST应用程序()中的用户进行身份验证。我正在使用django cors headers解决cors问题,但仍然得到403禁止(未设置CSRF cookie)。:/api auth/login/错误/ 我的用户是django.contrib.auth.models.AbstractUser的直接子类,我正在使用rest\u framework.url登录用户。如果我从内置的Django模板()调用它,我可以成功登录,但是当我使用

我正在托管一个React应用程序(),希望通过调用对Django REST应用程序()中的用户进行身份验证。我正在使用
django cors headers
解决cors问题,但仍然得到
403禁止(未设置CSRF cookie)。:/api auth/login/
错误/

我的用户是
django.contrib.auth.models.AbstractUser
的直接子类,我正在使用
rest\u framework.url
登录用户。如果我从内置的Django模板()调用它,我可以成功登录,但是当我使用React应用程序发布时,我会得到一个403错误

我使用CORS挑战,但它似乎没有将Cookies与响应一起发送回去

我试着用邮递员发邮件,也收到了403错误

url.py

来自django.contrib导入管理
从django.url导入路径,包括
URL模式=[
路径(“”,include('users.url')),
路径('admin/',admin.site.url),
路径('api-auth/',包括('rest\u framework.url',namespace='rest\u framework'))
]
settings.py的一部分:

已安装的应用程序=[
“django.contrib.admin”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
“rest_框架”,
“护卫舰”,
“用户”,
]
中间件=[
“corsheaders.middleware.Corsmidlware”,
'django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xFrameOptions中间件',
]
AUTH_USER_MODEL='users.USER'
REST_框架={
“默认\u身份验证\u类”:(
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
CORS\u ORIGIN\u ALLOW\u ALL=True
CORS\u ALLOW\u凭据=True
会话\u COOKIE\u SAMESITE=无
CSRF_受信任_来源=[
'本地主机:3000',
'127.0.0.1:3000',
]
我正在使用调用API


在从调用DRF时,用户可以正确地进行身份验证,因此我相信DRF应用程序正在按预期工作。有人能帮我解决React应用程序和DRF之间的连接吗?

您的React应用程序必须使用合适的端点从服务器请求csrftoken并存储此cookie

例如:

# Django view.py
def get_csrf(request):
    return HttpResponse("{0}".format(csrf.get_token(request)), content_type="text/plain")

# Django urls.py
url(r'^api/get_csrf/?$', get_csrf, name="get_csrf"),
JS代码:

$.get( "api/get_csrf/", function(data) {
  Cookies.set('csrftoken', data);
});

您已启用csrf,端点调用可能需要csrf令牌。使用中间件:django.middleware.csrf.CsrfViewMiddleware。更多信息:@josemlp是否未随标题的
'X-CSRFToken':Cookies.get('CSRFToken')
部分一起提供?
$.get( "api/get_csrf/", function(data) {
  Cookies.set('csrftoken', data);
});