axios 不会将来自 localhost:5173 的 vue 请求的会话 ID 发送到 localhost:5000 的后端

问题描述 投票:0回答:1

我正在尝试使用 sessionID 从 vue 前端向 Node js 后端发送 axios 请求来处理管理员的会话。

这是登录管理员的登录示例

axios.defaults.withCredentials = true;
const submit = async (data) => {
  const { email, password } = data;
  const url = "http://localhost:5000/api/v1/users/loginAdmin";

  try {
    const res = await axios.post(url, {
      email,
      password,
    });
    error.value = undefined;
    console.log(res.data);
    const loginIng = useLogin();
    loginIng.logIn(res.data);
    router.push("/");
  } catch (err) {
    console.log(err);
    error.value = err.response.data.message;
  }
};

成功登录后,发生在我身上的事情,用户被推送到 / 的根目录,并且在安装组件之前,会在后端进行检查以验证管理员凭据,如下所示

axios.defaults.withCredentials = true;
setup() {
const login = useLogin();
const router = useRouter();
onBeforeMount(() => {
  axios
    .post("http://localhost:5000/api/v1/users/validateAdmin")
    .then((res) => {
      login.logIn(res.data);
    })
    .catch((err) => {
      console.log(err);
      router.push("/login");
    });
});
return {};

},

在app.js的后端,有一个session和cors策略允许来自前端,session存储在sqlite3中,如下所示。

app.use(
  session({
    store: new KnexSessionStore({
      knex: db,
      tablename: "sessions",
    }),
    secret: process.env.SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {
      maxAge: 1000 * 60 * 60 * 24,
      secure: process.env.NODE_ENV === "production",
    },
  })
);

在登录管理中,会话正在保存用户及其凭据 像这样

const loginAdmin = async (req, res) => {
    req.session.user = admin;
}

这是 ValidateAdmin 端点示例

const validateAdmin = async (req, res) => {
  const userSession = req.session;
  const user = userSession.user;
}

数据被保存到表中的sqlite3文件中,但是每次用户访问端点时,都会为他生成一个新的id,而我不需要这种情况发生

我已经尝试过: 设置滚动: false,在会话中 添加

app.use((req, res, next) => {
  req.session.touch();
  next();
});

到app.js

提前致谢

node.js vue.js session backend
1个回答
0
投票

实际上,经过一个月的努力理解这个问题。问题出在 Vue cli 版本中,该版本存在一些问题并阻止我发送这些请求。只需使用最新版本的 cli 即可解决!我现在发布答案,因为我刚刚想起这个问题!

© www.soinside.com 2019 - 2024. All rights reserved.