Переменная сеанса перезаписывается при вызове api из разных браузеров или с разных вкладок одного и того же браузера (node.js, express) - PullRequest
0 голосов
/ 04 февраля 2019

Я использовал сеанс в моем приложении узла, которое сохраняет «название компании» в переменной сеанса, называемой «sess.companyname», когда вызывается API «/ login».Затем я использую эту переменную сеанса в других вызовах API для извлечения данных из БД.

Проблема, с которой я сталкиваюсь, заключается в том, что я открываю другой браузер и пытаюсь повторить тот же процесс для другого пользователя,переменная сеанса перезаписывается новым «названием компании», и когда я возвращаюсь к предыдущему браузеру, все данные теперь имеют это новое «название компании», которое находится в новом браузере.Например: Пользователь 1 входит в систему из Chrome, Пользователь 2 входит в систему из Firefox, когда это происходит, данные пользователя 1 заменяются данными пользователя 2 // Обратите внимание, что оба браузера работают на одном компьютере.

ЭтоМой файл Server.js:

 const express = require('express');
 const session = require('express-session');
 const mongoose = require('mongoose');
 const appRoute = require('./BackEnd/erpRoute');
 const bodyParser = require('body-parser');
 const port = 3000;
 const app = express();
 mongoose.connect('mongodb://dbkey...', (err) =>{
 if(err){
    console.log('error');
 }
 else{
    console.log('done');
 }
 });
 app.use((req, res, next) => {
 res.setHeader("Access-Control-Allow-Origin", "*");
 res.setHeader(
  "Access-Control-Allow-Headers",
  "Origin, X-Requested-With, Content-Type, Accept"
 );
 res.setHeader(
  "Access-Control-Allow-Methods",
  "GET, POST, PATCH, DELETE, OPTIONS"
 );
 next();
 });
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: false }));
 app.use(session({genid:(req) =>{console.log(req.sessionID) },secret: 'erp- 
 app', saveUninitialized: true, resave: false}));
 var sess;
 app.use('/erpRoute',appRoute);
 app.listen(port,() => {
 console.log("server live at : " + port );
 });

И это мой маршрутный файл API:

var express = require('express');
var router = express.Router();
const CModel = require('./db');
const TModel = require('./db2');
const async = require('async');
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
  console.log('Time: ', Date.now());
  next();
});
//****************/the home page***********************
router.get('/', function (req, res) {
   res.send('Visit other routes to start the app!')
});
//**************/route for login validation*************
router.post('/login',(req, res) => {
sess=req.session;
sess.companyname;
    const email_id = req.body.email;
    const mypassword = req.body.password;
    CModel.findOne({$and:[
        {"email":email_id},
        {"password":mypassword}
    ]}).select({"company_name":1,"email":1,"password":1})
    .then((val,err) => {
        if(err){
            return res.status(500).send(err);
        }
        if(!val)
        {
           return res.status(403).json({
                status:"unSuccessful",
            });
        }   
        if(val){
            sess.companyname =  val.company_name;
            sess.save();
            console.log(sess);
            return res.status(200).json({
                status:"Successful",
                companyName:sess.companyname
            }); 
        }
    }).catch(err=>{res.status(500).send(err.message)});   
  });
  //************Route to display Existing Customers*************
  router.get('/CustomerDisplay',(req, res) => {
  const companyName = sess.companyname;
  CModel.find({"company_name":companyName},{"Sales_customer":1})
  .then((val,err) => {
     if(err){
         return res.status(500).send(err);
     }
     if(!val)
     {
          return res.status(403).json({
            status:"Customers Not Found",
          });
     }   
    if(val){
        return res.status(200).json({
            status:"Customers Found Successfully",
            companyName:val 
        }); 
    }
    }).catch(err=>{res.status(500).send(err.message)});   
    });

Я сталкиваюсь с той же проблемой, если я попробую это в том же браузере, открыв новыйокно браузера или новая вкладка.Это потому что сервер

...