NodeJS Express-session with react不工作,在会话中获得null怎么办?

lhcgjxsq  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(107)

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

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);
    });
});

正确获取响应电子邮件
React请求

axios
    .post(LoginURL, {
      body: loginDetails,
      headers: {
        'Content-Type': 'application/json'
      },
      withCredentials: true
      
    })
lnlaulya

lnlaulya1#

我也有同样的问题。发生的事情是,每次我在登录后使用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));
};

相关问题