Развернутый веб-сайт MERN stack Ec2 не входит в систему

#reactjs #typescript #amazon-ec2 #mern

Вопрос:

Ищу некоторую помощь, пытаюсь развернуть приложение стека mern на aws с использованием экземпляров ec2. Все идет хорошо, я могу зарегистрировать новых пользователей и войти в систему, проблема в том, что он не остается в системе, пользователь мгновенно становится неопределенным. Кто-нибудь сталкивался с этой проблемой раньше? Думаю, это может быть как — то связано с печеньем. Поскольку почтальон работает хорошо, он может войти в систему, а затем получить пользователя.

Показан код промежуточного программного обеспечения с использованием Passport.

 const LocalStrategy = passportLocal.Strategy; mongoose.connect(...); // Middleware const app = express(); app.use(express.json()); //before deployment //app.use(cors({origin:"http://localhost:3000",credentials:true}))  app.use(cookieParser()); app.use(cors({origin:"http://ec2-18-191-200-43.us-east-2.compute.amazonaws.com:3000",credentials:true})) app.use(  session({  secret:"secretcode",  resave:true,  saveUninitialized:true,  cookie:{  sameSite:false  }  }) ); app.use(passport.initialize()); app.use(passport.session());  //Passport  passport.use(new LocalStrategy((username:string, password:string, done) =gt; {  User.findOne({ username: username }, (err:any, user: DatabaseUserInterface) =gt; {  if (err) throw err;  if (!user) {  console.log("not user");  return done(null, false);  }  bcrypt.compare(password, user.password, (err, result:boolean) =gt; {  if (err) throw err;  if (result === true) {  console.log("good should be logged in");  return done(null, user);  } else {  //unuathorised  console.log("unathorised");  return done(null, false);  }  });  });  })  );    passport.serializeUser((user: DatabaseUserInterface, cb) =gt; {  cb(null, user._id);  });    passport.deserializeUser((id: string, cb) =gt; {  User.findOne({ _id: id }, (err: any, user: DatabaseUserInterface) =gt; {  const userInformation :UserInterface = {  username: user.username,  isAdmin: user.isAdmin,  id: user._id,  wins:user.wins,  losses:user.losses  };  cb(err, userInformation);  });  }); //log in  app.post("/login", passport.authenticate("local"), (req, res) =gt; {  res.send("success"); });  

Ответ №1:

Продолжение: Я новичок в aws и подумал, что вам нужно запустить 2 разных кластера с 2 разными экземплярами для выполнения 2 задач. На самом деле вам нужен только 1 кластер с 1 экземпляром, который может выполнять столько задач, сколько вы хотите. Таким образом, файлы cookie могут фактически передаваться между портами, используемыми различными задачами, т. е. между интерфейсом и бэкендом.