如何使用 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 配置不正确

Django REST-Auth 密码重置

Django rest-auth allauth 注册,带有电子邮件、名字和姓氏,没有用户名

Django rest-auth中的create和perform_create方法有啥区别[重复]