代码之家  ›  专栏  ›  技术社区  ›  Lem0n

使用nodejs express、cors、express会话时会话丢失

  •  0
  • Lem0n  · 技术社区  · 3 年前

    使用nodejs、express、express session、cors和;cookie解析器,用于与使用axios发送http请求的react应用程序通信,并将mariadb用于数据库。

    在localhost(3000前端,3001后端)上使用这两种方法都可以很好地工作,会话被正确保存并可以检索/使用(我只传递用户数据)。

    在本地网络或aws的EC2实例上部署后端时,req。会话仅返回应用程序中“cookies”上设置的参数。在登录上设置后调用时使用(session({})。

    应用程序。js公司:

    const express = require('express');
    const cors = require('cors');
    const session = require('express-session');
    const pool = require('./config/database');
    const cookieParser = require('cookie-parser');
    
    
    const app = express();
    
    app.use(express.json());
    app.use(cors(
        {
            credentials: true,
            origin: true,
        }
    ));
    
    app.set('trust proxy', 1)
    app.use(cookieParser());
    
    
    app.use(session({
        secret: 'cat on keyboard',
        saveUninitialized: false,
        resave: false,
        cookie: { httpOnly: false, maxAge: 1000 * 60 * 60 * 24 }
    }));
    

    请求。会话集

    getAccountIdByEmail: async (req, res) => {
    // connect & retrieve user from credentials //
     req.session.logged_user = user[0][0];
     return res.status(200).json({ success: user[0][0] })
    };
    
    

    来自react应用程序的axios调用:

    const fetchData = () => {
            if (adress.charAt(0) == '/') {
                adress = endpoint + adress;
            }
            axios({
                method: method,
                url: adress,
                data: content,
                withCredentials: true
            })
                .then((res) => {
                    setResponse(res.data);
                })
                .catch((err) => {
                    setError(err);
                })
                .finally(() => {
                    setloading(false);
                });
        };
    

    起初我认为它来自Aws EC2上的Nginx,但它直接在实例的3001端口上进行相同的调用,然后我在本地网络上遇到了同样的问题。 我也尝试过使用存储(express session mariadb存储或express mysql会话),但没有成功。 我认为这可能与cors或headers有关,但无法确定什么不起作用。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Oss Kell    3 年前

    我注意到 express-session-npm

    有一个免责声明说,它仅用于开发,如果在生产中部署,将有内存泄漏