javascript - 无法在 axios 上添加授权 header

标签 javascript reactjs axios

我面临一个奇怪的问题,我的 httpClient 没有添加 axios header 。我的httpClient.js

import axios from "axios";
import logHandler from "../utils/logService";

axios.defaults.headers.common['Content-Type'] = 'application/json';
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
// axios.defaults.headers.common["Authorization"] = "Bearer "+ localStorage.getItem('_token');

let client = axios.create({
    baseURL: 'http://laracms.test/api'
});

axios.interceptors.response.use(null, (error) => {
    const expectedError =
        error.response &&
        error.response.status >= 400 &&
        error.response.status < 500;

    if (!expectedError) {
        logHandler.log(error);
    }

    return Promise.reject(error);
});

function setJwt(token) {
    console.log('called setJWt >>', token);
    axios.defaults.headers.common["Authorization"] = "Bearer "+ token;
}

export default {
    get: client.get,
    post: client.post,
    put: client.put,
    delete: client.delete,
    setJwt
};

还有我的authService.js看起来像:

// import { apiURL } from "../config/config.json";
import httpClient from "../utils/httpClient";

 const apiURL = "http://laracms.test/api"

const apiEndpoint = apiURL + "/auth";
const tokenKey = "_token";

httpClient.setJwt(getJwt());

export async function register(user) {
    return httpClient.post(apiEndpoint + "/register", {
        name: user.name,
        email: user.email,
        password: user.password,
    });
}

export async function verify(activation_code) {
    return httpClient.get(apiEndpoint + "/verify-email/" + activation_code);
}

export async function login(email, password) {
    const response = await httpClient.post(apiEndpoint + "/login", {
        email,
        password,
    });
    const token = response.headers["x-auth-token"];
    localStorage.setItem(tokenKey, token);
    return response;
}

export function getCurrentUser() {
    try {
        const jwt = localStorage.getItem(tokenKey);
        return jwtDecode(jwt);
    } catch (ex) {
        return null;
    }
}

export function logout() {
    localStorage.removeItem(tokenKey);
}

export function getJwt() {
    if(tokenKey in localStorage){
        return localStorage.getItem(tokenKey);
    }
    return null;
}

export default {
    verify,
    login,
    logout,
    getCurrentUser,
    getJwt,
};

尽管如此,我可以清楚地看到 setJwt被召唤

enter image description here

但是,如果我取消注释 axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 下面的行它也在发送授权 header 。可能,这并不重要,但只是为了我使用 Laravel 8 作为后端的信息。

最佳答案

您正在 axios.create(... 创建一个 axios 实例并且您正在使用该实例作为客户端,当您设置授权 header 时,您将其设置为“axios defaults”而不是之前创建的实例。将 header 添加到 setJWT 函数中的 axios 实例中,这应该可行

关于javascript - 无法在 axios 上添加授权 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67223707/

相关文章:

javascript - React Native ViewPager 与 KeyboardAvoidingView 作为 parent 不保持键盘 - iOS

reactjs - 如何使用提供的操作通过模拟 Axios 编写一个 Jest 测试?

javascript - React - 请求取消页面更改

javascript - 将 API 派生值映射到 React.js 状态的问题

javascript - 创建数据的多维数组不会在 javascript 上生成数组

javascript - 单元测试 - 通量和数据持久性

javascript - 在 Javascript 中,是否保证 {} !== {}?

reactjs - Babel throwing 对实验语法 'jsx' 的支持当前未启用

reactjs - 如何使用 RouteComponentProps 测试 React 组件?

javascript - 为什么当状态在 ReactJs 上有对象时我的 onChange 不起作用