vue3中用axios请求怎么添加cookie

在 Vue 3 中使用 axios 发起请求时,可以通过配置 axios 的请求选项来携带 Cookies。具体来说,确保跨域请求时,设置 withCredentials: true,以便发送和接收 Cookies。

首先确保你在 axios 请求中设置了 withCredentials: true,这样浏览器在跨域请求时会携带 Cookies。

示例:
js 复制代码
import axios from 'axios';

axios.defaults.withCredentials = true; // 默认在每次请求时携带 cookies

// 发起请求示例
axios.get('https://api.example.com/data', {
  // 额外配置选项(如果需要)
  withCredentials: true, // 在单个请求中指定是否携带 cookies
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('Error fetching data:', error);
});

2. 跨域请求时配置 withCredentials

当你的请求跨域时(请求的 URL 和前端项目的 URL 不同),需要在请求头中设置 withCredentials 以便携带 Cookies,同时后端服务器也需要允许跨域的 Cookies。

Vue 3 中的 Axios 全局配置:

你可以在 Vue 项目中通过全局配置 axios 来确保所有请求默认携带 Cookies:

js 复制代码
import { createApp } from 'vue';
import App from './App.vue';
import axios from 'axios';

// 设置axios全局配置
axios.defaults.withCredentials = true; // 所有请求都携带 Cookies

const app = createApp(App);

// 将axios挂载到全局
app.config.globalProperties.$axios = axios;

app.mount('#app');
单个请求中设置 withCredentials

你也可以只在特定请求中指定 withCredentials

js 复制代码
axios.post('https://api.example.com/login', { username, password }, {
  withCredentials: true // 仅针对该请求携带 Cookies
})
.then(response => {
  console.log('Login successful');
})
.catch(error => {
  console.error('Error logging in:', error);
});

3. 确保后端允许 Cookies

后端也需要正确设置 CORS 头来允许 Cookies。具体配置如下:

  • 允许跨域 :后端必须设置 Access-Control-Allow-Origin,并且不能为通配符 *,而是指定具体的域名。
  • 允许携带 Cookies :设置 Access-Control-Allow-Credentials: true
示例(Node.js/Express):
js 复制代码
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', 'https://your-frontend-domain.com'); // 指定允许的前端域名
  res.header('Access-Control-Allow-Credentials', 'true'); // 允许携带 Cookies
  next();
});

4. 浏览器限制

请注意,某些浏览器会对跨域请求的 Cookies 携带有一定限制,确保你在客户端和服务器端都配置正确的 CORS 头,并且后端允许设置 credentials

通过这些步骤,你就可以在 Vue 3 中使用 axios 请求时携带 Cookies。

进一步提问: 如果还没有域名,可以指定前端使用的ip+端口号么?

可以的,如果还没有域名,你可以在后端指定前端的 IP 地址和端口号来允许跨域请求并携带 Cookies。Access-Control-Allow-Origin 头可以设置为前端运行的 IP 地址加端口号,这样跨域请求就能正常进行。

示例:指定 IP + 端口号

假设你的前端在本地运行,IP 是 192.168.1.100,端口号是 8080,你可以在后端 CORS 配置中指定这个 IP 和端口号。

Node.js/Express 示例:
js 复制代码
app.use((req, res, next) => {
  // 指定允许的前端 IP 和端口
  res.header('Access-Control-Allow-Origin', 'http://192.168.1.100:8080'); 
  res.header('Access-Control-Allow-Credentials', 'true'); // 允许携带 Cookies
  res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS'); // 允许的方法
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); // 允许的请求头
  next();
});
后端必须做的设置:
  1. Access-Control-Allow-Origin :指定前端的 IP 地址和端口号,格式为 http://<IP>:<PORT>,比如 http://192.168.1.100:8080。你不能使用通配符 *,因为浏览器要求在使用 withCredentials: true 时,Access-Control-Allow-Origin 必须是具体的域名或 IP,而不能是 *
  2. Access-Control-Allow-Credentials: true:允许服务器接收带有 Cookies 的请求。
  3. 前端使用 withCredentials: true :确保 axios 请求中启用了 withCredentials: true 选项,以便在跨域请求时携带 Cookies。
示例:前端的 axios 请求
js 复制代码
axios.get('http://your-backend-ip:port/api', {
  withCredentials: true,  // 确保发送和接收 Cookies
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('Error:', error);
});
注意事项:
  • IP + 端口号 :确保你在 Access-Control-Allow-Origin 中指定的 IP 和端口 和前端访问的 URL 完全匹配(包括 httphttps 协议)。
  • 本地环境下的变化:如果本地 IP 地址或端口发生变化,需要相应地调整后端的 CORS 配置。
  • 跨域请求调试:浏览器会严格遵守跨域规则,如果配置不正确,可能会报 CORS 错误。可以通过浏览器的开发者工具(网络请求选项)来查看跨域请求是否成功。

通过这种方式,在没有域名的情况下,你可以使用 IP + 端口号 配置后端的跨域请求并携带 Cookies。

相关推荐
GIS开发特训营1 小时前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
一个处女座的程序猿O(∩_∩)O5 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
燃先生._.11 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
2401_8576009514 小时前
SSM 与 Vue 共筑电脑测评系统:精准洞察电脑世界
前端·javascript·vue.js
2401_8576009514 小时前
数字时代的医疗挂号变革:SSM+Vue 系统设计与实现之道
前端·javascript·vue.js
GDAL14 小时前
vue入门教程:组件透传 Attributes
前端·javascript·vue.js
轻口味14 小时前
Vue.js 核心概念:模板、指令、数据绑定
vue.js
2402_8575834914 小时前
基于 SSM 框架的 Vue 电脑测评系统:照亮电脑品质之路
前端·javascript·vue.js
java_heartLake15 小时前
Vue3之性能优化
javascript·vue.js·性能优化