如何在axios的rest-auth中使用令牌发布? POST http:// localhost:8000 / rest-auth / password / change / 401未经授权

问题描述

这是我在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参数。

预先感谢

解决方法

您缺少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
      }
    })
,

我遇到了类似的问题。我意识到我正在为登录到应用程序的用户使用相同的 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)。这对我有用。