为什么我的应用程序在使用 express-session 和 nodejs 的前端无法设置 cookie?

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

我正在使用MERN堆栈进行编程,当使用express-session时,我遇到了一堵墙。当我的前台使用Express-session时,我似乎无法设置cookie。localhost:3000 在我的后台打端点 localhost:8080. 饼干设置完全正常,当我在 localhost:8080 我在我的后台打了我的端点。localhost:8080. 如何解决这个问题?我希望react能够设置 httpOnly 当我注册我的用户或当我登录时重新生成cookie或当我注销时销毁会话等等......。我不太确定这是否是我处理的Cors问题。问题是我无法从我的前端看到这些cookie被设置。

const express = require('express');
const path = require('path');
const mongoose = require('mongoose');
const session = require('express-session')
const cors = require('cors')

const MongoStore = require("connect-mongo")(session)
const PORT = process.env.PORT || 8080;
const config = require('config')

const server = express();

server.set('trust proxy', 1);
server.use(express.json());
server.use(express.urlencoded({ extended: true }))
server.use(cors({
  origin: "http://localhost:3000",
  optionsSuccessStatus: 200,
  credentials: true
}))

server.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, Set-Cookie");
  res.header("Access-Control-Allow-Methods", "POST, GET, HEAD, DELETE, PUT, OPTIONS");
  res.header("Access-Control-Allow-Credentials", "true")
  if ('OPTIONS' == req.method) {
    res.sendStatus(200);
  }
  else {
    next();
  }
});

mongoose.connect(process.env.MONGODB_URI || config.get("mongo_db_key"),
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false
  })
  .then(() => console.log("MongoDB Connected"))
  .catch((err) => console.log(err))

server.use(session({
  secret: 'keyboard cat',
  resave: false ,
  saveUninitialized: false,
  cookie: {
    secure: false,
    maxAge: 1000 * 60 * 60 * 24,
  },
  store: new MongoStore({
    mongooseConnection: mongoose.connection
  })
}))

const auth = require('./routes/API/auth');

server.use('/account', auth);

server.listen(PORT, () => console.log(`listening on port: ${PORT}`));

javascript node.js mongodb express express-session
1个回答
0
投票

你不能跨域设置cookie(包括协议、域和端口),例外的是你可以为子域共享的上级域设置cookie(例如,你可以为子域设置cookie) Domain=mozilla.org 然后 developer.mozilla.org 将获得cookie).当涉及到维持用户会话的cookie时,它们几乎总是由服务器而不是客户端设置的(客户端访问会话cookie应该受到限制,以保证安全)。 当涉及到维护用户会话的cookie时,它们几乎总是由服务器而不是客户端设置的(出于安全考虑,客户端对会话cookie的访问应该受到限制)。

在最基本的模式中,你只会有一个单一的后端服务器,它将为你的react应用服务,同时为了简单起见也提供后端。

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