1. 问题描述
Eggjs + Vue + axios
,在Eggjs开发中,登录的时候需要前端传图形验证码,当用户点击登录那一瞬间,后端死活获取不到 ctx.session.captcha
2. 排查和结论
2.1 排查点一:egg允许跨域“credentials”,axios配置“withCredentials”
- 后端Egg配置
// config/config.default.js
config.cors = {
credentials: true, //允许Cook可以跨域
origin: '*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
};
- 前端axios配置
const service = axios.create({
baseURL: import.meta.env.DEV ? 'http://127.0.0.1:8000' : '',
withCredentials: true, // 配置withCredentials
timeout: 5000
});
// 或者
axios.defaults.withCredentials=true
2.2 排查点二:前端axios请求地址
必须和后端Egg运行地址
保持一致;
// 1、以下方式不行 ❌
egg 运行地址:http://127.0.0.1:8000
axios 请求地址:http://localhost:8000
// 2、以下方式可行
egg 运行地址:http://127.0.0.1:8000
axios 请求地址:http://127.0.0.1:8000
除了以上两个排查点以外,欢迎补充!!!!