记一次 EggJS:始终获取不到 this.ctx.session

52 阅读1分钟

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

除了以上两个排查点以外,欢迎补充!!!!