首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未设置CSRF cookie [Django/AngularJS]

未设置CSRF cookie [Django/AngularJS]
EN

Stack Overflow用户
提问于 2020-08-16 03:46:25
回答 1查看 263关注 0票数 0

首先,这不是一个重复的问题。我已经尝试了所有关于stackoverflow的相关帖子,但没有找到解决方案。

我有一个后端的Django应用程序和前端的AngularJS应用程序。我正在使用djangorestframework-jwt进行API身份验证。我有一个不需要任何身份验证的API端点,并且在浏览器上仅针对此端点收到CSRF Failed: CSRF cookie not set错误。

在我的django设置中,我有:

ALLOWED_HOSTS = ['*']

并且它不包括任何CSRF_COOKIE_SECURECSRF_COOKIE_HTTPONLYSESSION_COOKIE_SECURE设置。

djangorestframework-jwt设置为:

代码语言:javascript
复制
JWT_AUTH = {
    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_ALGORITHM': 'HS256',
    'JWT_VERIFY': True,
    'JWT_VERIFY_EXPIRATION': True,
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=3000),
    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=1),
    'JWT_AUTH_COOKIE': 'refresh-token'
}

我注意到,在浏览器cookie中,如果有任何refresh-token键,那么端点就工作得很好。当浏览器cookie中不存在该密钥时,问题就出现了。我设置了'JWT_AUTH_COOKIE': None或删除了以下行:

代码语言:javascript
复制
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_AUTH_COOKIE': 'refresh-token'

JWT_AUTH设置,但没有运气。

我还为该端点尝试了@csrf_excempt,但也不起作用。

有趣的是,当我发送邮递员的请求时,它起作用了。

以下是我在前台发送的请求:

代码语言:javascript
复制
$http({
    url: url,
    method: "PUT",
    headers: {
        'Content-Type': 'application/json'
    },
    data: data
})

我想知道浏览器cookies中不存在refresh_token密钥时出现错误的原因,以及如何解决此问题。

EN

回答 1

Stack Overflow用户

发布于 2020-08-16 07:35:17

我通过将'X-CSRFToken': $cookies.get("csrftoken")添加到Http请求头部解决了这个问题,因此请求现在看起来如下所示:

代码语言:javascript
复制
$http({
    url: url,
    method: "PUT",
    headers: {
        'Content-Type': 'application/json',
        'X-CSRFToken': $cookies.get("csrftoken")
    },
    data: data
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63430204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档