我正在尝试使用 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
提前致谢
实际上,经过一个月的努力理解这个问题。问题出在 Vue cli 版本中,该版本存在一些问题并阻止我发送这些请求。只需使用最新版本的 cli 即可解决!我现在发布答案,因为我刚刚想起这个问题!