Как обрабатывать и проверять сеансы между бэкэндом и внешним интерфейсом - PullRequest
0 голосов
/ 23 апреля 2019

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

Я прочитал несколько статей о том, как генерировать токен сеанса, но у меня нетподсказка о том, как проверить этот токен после отправки на серверную часть с просьбой предоставить некоторую информацию

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

router.post("/createUser",(req,res)=>{
    const {Name, Email , Phone , Password, UserName} = req.body
    console.log(Email,Phone,Password)
    if(Name && Email && Phone && Password){
        const user = new UserModel({Name,Email,Phone,Password,UserName})
        user.save((e)=>e? console.log(e): console.log("success"))
        const Session = new SessionModel({userID:user._id,session:req.sessionID})
        Session.save()
        res.status(201).send(req.sessionID)
    }else{
        res.status(500).send()
    }
})

, и вот как я проверяю запрос

router.use("/profile",(req, res , next)=>{
    const {SessionID , UserID} = req.query

    SessionModel.findOne({userID:UserID},(err,session)=>{
        if(session.session === SessionID){
            next()
        }else{
            return res.status(500).send()
        }
    })})


router.get("/profile",(req,res)=>{
    res.send("works")
})

1 Ответ

0 голосов
/ 23 апреля 2019

Вы довольно сильно дублируете вещи: сессионные экспрессы уже управляют сессиями для вас, нет смысла дублировать эти сессии в базу данных (экспресс-сессии могут сделать это для вас, если вам нужно масштабировать за пределы одного сервера).

На самом деле вы можете просто сохранить идентификатор пользователя в сеансе, а затем проверить, существует ли идентификатор пользователя в сеансе для проверки запроса. Если вам нужен доступ к данным пользователя, вы можете просто найти пользователя на основе идентификатора.

 router.post("/createUser",(req,res) => {
   // ...
   req.session.userID = user._id;
   //...
 });

 router.use((req, res, next) => {
   if(!req.session.userID)
     return res.status(403).send("not logged in");
  next();
 });

 // all routes are secured beyond this point

Обязательное примечание. Никогда не храните пароли в виде простого текста в вашей базе данных (иначе как на Facebook;)). По крайней мере, хэшируйте их, если вы хотите сделать это правильно, хешируйте их с солью для каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...