React 的 Express-session 不起作用,在会话中获取 null 怎么办?

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

我想创建一个反应应用程序,登录后在登录系统中我将电子邮件保存到会话中。但是在下一个请求中,保存的数据在这里变为空是我的代码,

快递专区

  app.use(cors({
  
    origin: "http://localhost:3000",
    credentials:true,       
    methods: ['POST', 'PUT', 'GET', 'OPTIONS', 'HEAD'],
    optionSuccessStatus:200,
}))
  // Router setup middlewares
  app.options('http://localhost:3000', cors()) 

快速登录部分

router.post("/login", async (req, res) => {
  superAdminHelpers
    .Login(req.body.body)
    .then((response) => {
      req.session.superAdmin = response.email;
      res.send(response);
   
    })
    .catch((err) => {
      res.status(401).send(err);
    });
});

正确获取回复邮件

响应请求

   axios
    .post(LoginURL, {
      body: loginDetails,
      headers: {
        'Content-Type': 'application/json'
      },
      withCredentials: true
      
    })
node.js reactjs session session-cookies express-session
1个回答
0
投票

我有同样的问题。发生的事情是,每次我在登录后使用 axios 调用其他 api 时,每个新请求都会创建一个新会话。我解决的方法是:

前端:

import axios from 'axios'

const request = axios.create({
  baseURL:   process.env.NEXT_PUBLIC_API_BACKENDURL,
  timeout: 20000,
  withCredentials: true,
});




export default request

创建一个 axios 实例。通过这样做,您用于登录的先前会话将被保留。导入此实例并在每个 api 请求中使用它,而不是创建新实例。

对于后端:

if (process.env.NODE_ENV === 'PRODUCTION') {
    let sess = {
        secret: '',
        saveUninitialized: true,
        resave: false,
        proxy: true,
        name:"app",
        cookie: {
            secure: true, // This will only work if you have https enabled!
            httpOnly: true,
            sameSite: 'none'
        }
    };

    app.use(session(sess));
};

if (process.env.NODE_ENV === 'DEVELOPMENT') {
    let sess = {
        secret: '',
        saveUninitialized: true,
        resave: false,
        proxy: true,
        name:"app",
        cookie: {
            httpOnly: true,
        }
    };

    app.use(session(sess));
};

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