#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 могут фактически передаваться между портами, используемыми различными задачами, т. е. между интерфейсом и бэкендом.