Reactjs 使用身份验证标头进行基于令牌的身份验证,给出403禁止的错误 我的react应用程序中有以下代码:

Reactjs 使用身份验证标头进行基于令牌的身份验证,给出403禁止的错误 我的react应用程序中有以下代码:,reactjs,django,django-rest-framework,fetch,django-rest-auth,Reactjs,Django,Django Rest Framework,Fetch,Django Rest Auth,我正在向rest backed发送一个更新请求,这需要对用户进行身份验证才能执行PUT/POST/DELETE请求 const update=(e)=>{ e、 预防默认值() const formData=新formData(form.current); console.log('Token'+localStorage.getItem(“Token”)//有效的Token 常量请求选项={ 方法:'放', 标题:{ //'Authorization':'Basic'+btoa('user:pa

我正在向rest backed发送一个更新请求,这需要对用户进行身份验证才能执行PUT/POST/DELETE请求

const update=(e)=>{
e、 预防默认值()
const formData=新formData(form.current);
console.log('Token'+localStorage.getItem(“Token”)//有效的Token
常量请求选项={
方法:'放',
标题:{
//'Authorization':'Basic'+btoa('user:password')//基本身份验证有效
“授权”:“令牌”+localStorage.getItem(“令牌”),
},
正文:formData
};
获取(url、请求选项)
。然后(异步响应=>{
const data=wait response.json();
如果(!response.ok){
常量错误=(data&&data.message)| | response.status;
返回承诺。拒绝(错误)
}
警报('成员已更新')
历史。推送(“/members”)
})
.catch(error=>console.error('Some error',error))
}
不幸的是,我在控制台日志中看到了以下内容:

PUT http://localhost:8000/uskindia/56/ 403 (Forbidden)
Some error  403
在备份的日志中:

Forbidden: /uskindia/56/
[... *:*:*] "PUT /uskindia/56/ HTTP/1.1" 403 58
在过去的24小时里试图解决这个问题,但没有得到正确的答案

从各种尝试来看,似乎:
  • 后端DRF和django rest auth未正确处理令牌
  • 尝试了各种用户代理,如curl、httpie和postman,以密切查看请求和响应
  • 即使在已备份的put日志中,但
    request.user==AnonymousUser
    具有基于令牌的授权
  • 与基本授权、方案配合良好

如果您使用djangorestframework作为后端,则必须使用以下格式发送令牌:

“授权”:“承载者”+localStorage.getItem(“令牌”),


使用承载而不是令牌。

设置中有一个输入错误。py

早些时候 REST_框架={ “默认\u身份验证\u类”:[ 'rest_framework.authentication.TokenAuthentication', ], # .... } #改为 REST_框架={ “默认\u身份验证\u类”:[ 'rest_framework.authentication.TokenAuthentication', ], # ... } 感谢博客作者

这表明,如果响应包含
WWW-authenticate:Token
则表示Token身份验证正在工作


由于在我的案例中缺少这一点,所以我从头开始设置REST_框架设置,并找到了问题的根本原因。

从文档中建议使用
“授权”:“Token”+localStorage.getItem(“Token”),
,但存在一些问题,需要彻底调试它。您正在使用哪个库?Django rest auth与DRF一起在backed中使用。似乎后端有什么不好的地方。