reactjs - React.js 页面刷新后,Axios 默认 header 被清除

标签 reactjs axios

我在登录组件中设置 axios.defaults.headers.Authorization = MY_TOKEN,该组件在身份验证组件中呈现,该组件检查 this.state.loggedin 是否设置为 true。如果为 false,则呈现 Login 组件,如果为 true,则使用 BrowserRouter 呈现 UserComponent。 BrowserRouter 读取“/”路径并导航到文档组件。在此导航页面刷新期间,axios.defaults.headers.Authorization 被清除,返回未定义的值。即使刷新页面,如何保留 axios.defaults.headers 或者每次路由器导航到其他组件时都应该初始化默认 header ?

更新

添加了一些如何在 Authentication.js 中进行渲染的代码

      render() {
      return (
        <UserNavigationContainer
          {...this.props}
          logout={this.onClickLogoutHandler}
        />
      );
     }

UserNavigationContainer.js 渲染路由(非完整代码)

<BrowserRouter>
      <div>
        <UserNavigationComponent {...this.props}>
          <Switch>
            <Route
              exact
              path="/"
              component={UserSubmittedDocumentsContainer}
            />

实际上,当 UserNavigationContainer 被渲染时,它会导航到“/”并在导航时刷新页面。

最佳答案

我有类似的经历,以下是我如何解决它

在用户登录/注册时将 token 保留到本地存储: 第一步是在登录/注册成功后将用户 token 保存到本地存储,您可以在浏览器的本地存储 API here 上进行阅读

将设置授权 header 的逻辑移动到无论当前路径如何都始终呈现的组件(在我的例子中是导航栏组件): 接下来是将负责设置授权 header 的逻辑移动到我的导航栏组件,通过这样做,它会自动从本地存储中获取事件用户的 token 并设置授权 header 。现在,无论react-router渲染哪个组件,都会不断地设置授权 header ,从而避免了对每个其他组件都这样做的需要。

PS:移动逻辑并不会阻止您最初在登录组件内设置授权 header ,它只是解决了为渲染的每个其他组件执行此操作的问题。

关于reactjs - React.js 页面刷新后,Axios 默认 header 被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54637071/

相关文章:

reactjs - 使用 toHaveBeenCalledWith 检查 EventTarget

javascript - 如何在创建 react 应用程序中使用 css 模块( react 语义 ui)?

ios - React Native 和美国导出法规

javascript - react : Axios Network Error

javascript - 带有 node.js 的 Axios - ReferenceError : XMLHttpRequest is not defined

reactjs - 如何使用 create-react-app 创建包含 Web3 的 React App?我收到模块未找到错误。重大变化 : webpack < 5 used

javascript - react 连接到 Node Cors 预检失败

reactjs - 使用 useEffect() Hook 和 Async/Await 从 Firebase/Firestore 获取数据

reactjs - Axios 请求超时

javascript - Axios:不进入错误的 catch 方法