当前位置: 首页 > 知识库问答 >
问题:

Axios默认令牌未设置

范修伟
2023-03-14

使用axios,我尝试为所有请求设置默认标头身份验证令牌。但默认情况下它没有被发现,并且对于任何其他api调用,“授权”没有在标头中设置。

这是一个常用文件

import axios from 'axios';
const axiosClient = axios.create({
    headers: {
        'Content-type': 'application/json',
        'Accept': 'application/json',
    }
});
const UseHttp = (requestConfig) => {
    return axiosClient({
        url: requestConfig.url,
        method: requestConfig.method || 'GET',
        data: requestConfig.body && JSON.stringify(requestConfig.body)
    }).then((response) => {
        if (response.status == 200) {
            return response.data;
        } else {
            throw new Error(response.data.message);
        }
    }).then((data) => {
        return data.data;
    }).catch((error) => {
        return error.message;
    });
};
export const setAuthHeader = (header) => {
    
    axiosClient.defaults.headers.common['Authorization'] = header;}
export default UseHttp;

登录后,我像这样设置标题

import {USER} from './Url';
import UseHttp, {setAuthHeader} from './UseHttp';
/* eslint-disable */
export const LoginApi = async (values) => {
    const requestOptions = {
        user_name: values.username,
        password: values.password
    }
    try {
        let res = await UseHttp({ url : USER.login, method:'POST', body: requestOptions});
        setAuthHeader(res.token);
        return res;
    } catch (err) {
        return err;
    }
}

但是当我调用任何其他API标头进行授权时,CountryApi.js所在的位置没有设置

   import UseHttp from './UseHttp';
   import {LANDING} from './Url';
    
    export const countryList = () => UseHttp({ url: LANDING.get_country_list });

Country.js是这个

import {countryList} from '../../../api/CountryApi';
useEffect(() => {
    countryList().then((res) => {
        setallData(res)
        
    });
}, [locale]) 

共有1个答案

韩靖琪
2023-03-14

这是一个基本的实现,说明了如何使用拦截器在发送请求之前修改请求,并在头部添加令牌(如果它存储在本地存储中的话)。

import Axios from "axios";

const axios = Axios.create({
        headers: {
            'Content-type': 'application/json',
            'Accept': 'application/json',
        }
    });
    
    axios.interceptors.request.use((config) => {
      const token = localStorage.getItem("token");
      if (token) {
        config.headers!.Authorization = `Bearer ${token}`;
      }
    
      return config;
    });
 类似资料:
  • 我有一个Vue SPA,我使用Axios处理请求,Vue Axios应用它,vuex存储令牌。但当我发送一个请求时,头授权将变成Bearer未定义或Bearer null。 流程是,通过登录,我检索一个令牌,将其保存到会话存储中,分派一个登录操作,我的vuex存储将从会话存储中设置一个处于状态的令牌。在我登录并将路由器重定向到“/”后,我想向/foo发送GET请求以及我的令牌。但这里我的代币没有定

  • 问题内容: 我正在尝试向每个API调用添加带有访问令牌的标头。它适用于所有GET请求,但是一旦我尝试进行POST,便不会添加标头。 这是我添加令牌的方法: 从这里调用: 我尝试这样做如下: 但这也不起作用。它仅在我如下更改标题键名称时才有效: 如何在AngularJs中为帖子分配默认标题并获取请求? 问题答案: 与其将令牌放在每个服务(或调用)内部的标头上,不如使用拦截器(docs在此处)。 然后

  • 直到最近,我在我的Nuxt项目中使用了我自己的注册/登录实现,在成功注册/登录之后,我能够做到这一点$axios。setToken(token,'Bearer'),它将在axios reguests上全局设置授权头。现在我必须重构应用程序并使用Nuxt auth模块。但现在我似乎无法设置此标题。 这是我的身份验证配置: 我以为auth应该自动添加这个授权,因为它默认将设置为,但它没有。所以我试图明

  • 我已经这样配置了我的axios 在我的组件中,我作为 现在,上面的方法可以工作了,但是我想在不影响全局基本URL的情况下更改,这样在我的组件中,我就可以在没有APIendpoint的情况下简单地使用它 我已经试过了 我该怎么办?

  • 设置当前设备(本地缓存) 参数说明 字段 类型 必须? 说明 device RKDevice 是 设备Entity 接口定义 Swift: RokidMobileSDK.device.setCurrentDevice(device: RKDevice) Objc: [RokidMobileSDK.device setCurrentDeviceWithDevice:self.device]; 获

  • 获取默认设备 接口说明 获取当前选择的设备。 示例代码: SDKDevice device = RokidMobileSDK.device.getCurrentDevice(); 设置默认设备 接口说明 更新当前选择设备 参数说明 字段 类型 必须? 说明 device SDKDevice 是 若琪设备实体 示例代码: RokidMobileSDK.device.setCurrentDevice