如何使用 axios 在 rest-auth 中使用令牌发布? POST http://localhost:8000/rest-auth/password/change/ 401(未经授权)
Posted
技术标签:
【中文标题】如何使用 axios 在 rest-auth 中使用令牌发布? POST http://localhost:8000/rest-auth/password/change/ 401(未经授权)【英文标题】:how to post using a token in rest-auth with axios? POST http://localhost:8000/rest-auth/password/change/ 401 (Unauthorized) 【发布时间】:2021-02-03 08:03:41 【问题描述】:这是我在 vue 中的代码,
resetPOST()
var formData = new FormData();
formData.append('old_password', this.oldPassword);
formData.append('new_password1', this.password1);
formData.append('new_password2', this.password2);
axios.post('http://localhost:8000/rest-auth/password/change/',
headers: 'Authorization' : this.token ,
data:
old_password: this.oldPassword,
new_password1: this.password1,
new_password2: this.password2
)
,
变量 'token' 的值如下:bbf957d27925a860f8c678546cf0425dbf7ddf98
我不明白为什么会出现这个错误,如果我尝试后面的部分,我输入旧密码,然后输入两个新密码,它就可以工作了。出于某种原因,我没有使用 token 参数。
提前致谢
【问题讨论】:
【参考方案1】:您缺少Bearer
。大多数框架默认要求您以以下格式发送授权:Bearer <token>
。
如果您将 Bearer
字更改为另一个字,则应使用该字词,但如果您在 django-rest-auth 中将其保留为默认值,则必须使用以下内容:
axios.post('http://localhost:8000/rest-auth/password/change/',
headers: 'Authorization' : `Bearer $this.token` ,
data:
old_password: this.oldPassword,
new_password1: this.password1,
new_password2: this.password2
)
【讨论】:
【参考方案2】:我遇到了类似的问题。我意识到我正在为登录到应用程序的用户使用相同的 axios 实例,这意味着使用身份验证令牌。当然,如果您要重置密码,则您没有身份验证(因此没有令牌)。使用不同的 axios 实例来重置密码,如下所示:
const instance = axios.create(
baseURL: Store.state.endpoints.baseUrl,
headers:
'Content-Type': 'application/json'
,
// xhrFields:
// withCredentials: true
// ,
xsrfCookieName:"csrftoken",
xsrfHeaderName:'X-CSRFToken'
)
return instance;
请注意,没有身份验证令牌和凭据被注释掉(也可能设置为 false)。这对我有用。
【讨论】:
以上是关于如何使用 axios 在 rest-auth 中使用令牌发布? POST http://localhost:8000/rest-auth/password/change/ 401(未经授权)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 allauth 和 rest-auth 从 React 前端在 Django 中重新发送确认电子邮件
Django 无法使用 rest-auth/user/ 获取当前用户
在 /rest-auth/registration/account-confirm-email 配置不正确