csrf_exempt 设置但 CSRF 失败:Referer 检查失败 - 没有 Referer

时间:2021-02-16 14:56:48

标签: django csrf google-cloud-endpoints

我有一个后端 API,它在 django 中并部署在 Google Endpoint 上。 我有一个将数据插入到我的数据库的发布请求。

我创建了一个脚本来使用此端点,但出现此错误:

<块引用>

{"detail":"CSRF 失败:Referer 检查失败 - 没有 Referer。"}

关于帖子,我在班级中添加了 crsf_exempt 装饰器,但它没有改变。
我尝试通过两种方式添加装饰器:

class AddUser(APIView):
    """ Create user and company from csv """

    @method_decorator(csrf_exempt)
    def post(self, request):


@method_decorator(csrf_exempt, name='dispatch')
class AddUser(APIView):
    """ Create user and company from csv """

    def post(self, request):

但都失败了。

这是我联系端点的方式:

resp = requests.request(
    method, url,
    headers={'Authorization': 'Bearer {}'.format(
        open_id_connect_token)}, **kwargs)

有什么想法吗? 谢谢


编辑

所以我尝试将身份验证类添加到我的视图中,但这似乎是一个坏主意。这对我来说真是麻烦。

我试图让 csrftoken 这样做:

        client = requests.session()
        # Retrieve the CSRF token first
        client.get(url)  # sets cookie
        print(client.cookies)
        if 'csrftoken' in client.cookies:
            # Django 1.6 and up
            csrftoken = client.cookies['csrftoken']
        else:
            # older versions
            csrftoken = client.cookies

事情是,我使用 IAP 来保护我的 API,我没有任何 csrftoken cookie,但我确实有一个看起来像这样的东西:

<块引用>

如何使用它向我的 API 发出发布请求?

2 个答案:

答案 0 :(得分:1)

所以这发生在我身上,因为我没有为我的通用视图设置任何authentication_classes
如果未设置此选项,Django 将自动使用 SessionBackend,这需要 csrf 令牌。
我通过将其添加到我的视图中来修复它:authentication_classes = [ModelBackend, GoogleOAuth2]

答案 1 :(得分:0)

@Kimor - 你能在你的 urls.py 中尝试这样做吗

 from django.views.decorators.csrf import csrf_exempt

url('^test/$', csrf_exempt(views.TestView.as_view())),

APIView 类上定义的 get 和 post 方法只是告诉 DRF 实际视图应该如何表现,但 Django 路由器期望的视图方法实际上并没有实例化,直到您调用 TestView.as_view()。

  • 来源

Django REST Framework CSRF Failed: CSRF cookie not set

相关问题