Axios无法通过API进行身份验证

时间:2019-12-31 00:47:22

标签: reactjs axios

我已经整天试图从我的Asp.Net Api获取数据,但无济于事。我登录并从服务器获取身份验证令牌,并将其存储在本地,但是当我尝试执行任何需要身份验证的操作时,服务器将返回401响应。我的代码中我做错什么了吗?当我使用邮递员之类的工具时,一切正常,但在我的应用程序中却无法正常工作。 这是我的登录名

try {
      response = await API.post(AuthUrl, credentials)
      if(response.status >= 200 || response.status <= 299){
        let Auth = {
          Username: response.data.Username,
          Roles: response.data.Roles,
          Expires: response.data.Expires,
          Token: response.data.Token
        };
        localStorage.setItem(window.location.host, JSON.stringify(Auth));
    }
}

这是我的axios封装器

export default axios.create({
    baseURL: BaseUrl,
    responseType: "json",
    auth: `Bearer ${localStorage.getItem(window.location.host) == null? "" : JSON.parse(localStorage.getItem(window.location.host)).Token}`
})

这就是我的消费方式

try{
                const response = await API.get(getUrl)
                setLoading(false);
               //........Do something with response
}

1 个答案:

答案 0 :(得分:1)

使用axios.create方法的方法不正确。 参考:https://github.com/axios/axios#request-config

该文档清楚地表明config auth:指示应使用HTTP Basic身份验证,并提供凭据。对于Bearer令牌等,请改用Authorization自定义标头,以便在您这种情况下可以执行类似的操作

export default axios.create({
baseURL: BaseUrl,
responseType: "json",
headers: {'Authorization': "bearer " + JSON.parse(localStorage.getItem(window.location.host)).Token}})