axios 如何在前端react jsx文件中调用后端API

hmae6n7t  于 12个月前  发布在  iOS
关注(0)|答案(2)|浏览(205)

目前,我正在使用React,Node,Express和Mysql开发CRUD应用程序,我是新来的,我面临的问题是我有一个从后端获取并存储在会话中的会话JWT令牌。但我不知道如何将其作为头部通过所有请求传递到后端以验证它,我有大约30-40个API链接,我现在直接调用这些链接,例如:const response = await axios.post(http://localhost:4000/confirm/${Id},{. data,});
我知道这是一个不好的做法,直接调用这样的API,但我没有得到在哪里存储它们,并通过传递会话ID与此沿着正确调用后端
我试图把API到.env文件,但没有得到如何通过该动态URL变量

yeotifhr

yeotifhr1#

首先,将axios config声明为:

axios.js

import axios from 'axios';

const instance = axios.create({
  baseURL: process.env.REACT_APP_API_BASE_URL, // Set your base URL in your .env file
});

instance.interceptors.request.use(
  (config) => {
    const token = sessionStorage.getItem('jwtToken'); // Get your JWT token from session storage or wherever you store it

    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

export default instance;

字符串
在您的组件中:

import axios from './axios'; // Import the Axios instance

async function fetchData(Id, data) {
  try {
    const response = await axios.post(`/confirm/${Id}`, data);
    // Handle the response
  } catch (error) {
    // Handle errors
  }
}


不要忘记在你的env文件中初始化env var:

REACT_APP_API_BASE_URL=http://localhost:4000

7fyelxc5

7fyelxc52#

我不是这里的Maven(这是我在StackOverflow中的第一个答案),但也许我可以从我使用NextAuth的经验中指出一些东西,我自己也有很多问题来正确处理身份验证。
我猜你是想做保护路线。我真的不知道如何正确地做到这一点,但让我问你一些事情,因为如果它符合你的需要,它的方式更容易!
我所做的是,我在前端有不同的交互可能性,关于用户是否经过身份验证。我所做的唯一验证是登录,然后将令牌存储在浏览器中,并为经过身份验证/未经过身份验证的用户提供不同的前端。事实上,未经过身份验证的用户(又名不是浏览器中的令牌)在我的应用程序中只能访问登录/注册页面.一旦你被认证,你做的检查在客户端之前获取.这是否符合您的需求?
我想你仍然可以用手写的网址查询,但被黑客攻击的人应该有你的其他用户会话ID。我不认为我在这里提供一个完整的解决方案,正如我所说,我最终使用NextAuth。
我希望我至少有帮助!
最新消息:看了贴出的答案,我认为它做得差不多,可能更好。但它没有回答你关于服务器端验证的问题。但也许我没有完全理解代码。

相关问题