解决Django + DRF:403 FORBIDDEN:CSRF令牌丢失或不正确,{"detail":"CSRF Failed: CSRF cookie not set."}

参考文章:https://blog.csdn.net/qq_43475097/article/details/83784305

解决Django + DRF:403 FORBIDDEN:CSRF令牌丢失或不正确,{“detail”:“CSRF Failed: CSRF cookie not set.”}

403: CSRF Failed: CSRF token missing or incorrect.

你为什么会收到这个错误?

由于您尚未AUTHENTICATION_CLASSES在设置中定义,DRF使用以下默认身份验证类。

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication'
)
————————————————
版权声明:本文为CSDN博主「紫楠&馨芷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43475097/article/details/83784305

 

现在,SessionAuthentication强制使用CSRF Token。如果未传递有效的CSRF令牌,则会引发403错误。

如果您使用的是AJAX风格的API有SessionAuthentication,你需要确保你有一个有效的CSRF令牌任何“不安全”的HTTP方法调用,如PUT,PATCH,POST或DELETE请求。

那你需要做什么?

由于您正在使用TokenAuthentication,您需要AUTHENTICATION_CLASSES在DRF设置中明确定义它。这应该可以解决您的CSRF令牌问题。

|

这个答案 编辑于2015年 9月16日16:45回答2015年 9月16日7:27 Rahul Gupta 17k 2 25 33你说我们必须传递一个有效的CSRF令牌。我在哪里可以找到这个令牌?在我的情况下,当我尝试使用端点登录时出现问题 。但它是客户端和服务器之间的第一次联系,因此客户端不知道令牌。- Ben Jan 4 at 13:37检查这个Django docs链接以获取Ajax请求的CSRF令牌。- Rahul Gupta 1月4日14:34谢谢@ rahul-gupta,但我不在网络环境中。我在ac#environment(Xamarin)。但无论如何,在休息<>客户端应用程序中,如果服务器没有告诉他,客户端就无法知道csrf。- rest-auth/login/BenJan 4 at 17:31然后您应该使用不同的身份验证类,因为SessionAuthentication需要发送CSRF令牌。您需要在设置或特定视图中明确定义该特定身份验证类。

| 解决方法

傻了,我错过TokenAuthentication了REST设置中的框架:

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    )
}

 

posted @ 2022-03-07 16:31  Jaetyn  阅读(945)  评论(0)    收藏  举报