Как обновить токен при входе пользователя в экспресс js? - PullRequest
0 голосов
/ 27 сентября 2018

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

router.post("/login", (req, res, next) => {
  User.find({ email: req.body.email })
    .exec()
    .then(user => {
      if (user.length < 1) {
        return res.status(401).json({
          message: "Auth failed"
        });
      }
      bcrypt.compare(req.body.password, user[0].password, (err, result) => {
        if (err) {
          return res.status(401).json({
            message: "Auth failed"
          });
        }
        if (result) {
          const token2 = jwt.sign(
            {
              email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
            },
            "123",
            {
                expiresIn: "1h"
            }
          );
          User.update({token : token2 })
            .exec()

          return res.status(200).json({
            message: "Auth successful",
            token: token2
          });
        }
        res.status(401).json({
          message: "Auth failed"
        });
      });
    })
    .catch(err => {
      console.log(err);
      res.status(500).json({
        error: err
      });
    });
});

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

Может кто-нибудь знать, где мне не хватает?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Попробуйте следующий код:

      jwt.sign(
        {
          email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
        },
        "123",
        {
            expiresIn: "1h"
        }, function(err, token2) {
           User.update({token : token2 }).exec() //Change the query to update

         return res.status(200).json({
            message: "Auth successful",
            token: token2
         });
       }
      );

Дайте мне знать, если это поможет.

0 голосов
/ 27 сентября 2018

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

Вместо обновления токена вы можете создать другой токен.Другим способом вы можете установить тайм-аут для токена.Токен будет недействительным после этого периода времени.

0 голосов
/ 27 сентября 2018

Попробуйте что-то вроде:

router.post("/login", async (req, res) => {
  try{
    const user = await User.find({ email: req.body.email });
    if (user.length < 1) {
      return res.status(401).json({
        message: "Auth failed"
      });
    }
    bcrypt.compare(req.body.password, user[0].password, (err, result) => {
      if (err) {
        return res.status(401).json({
          message: "Auth failed"
        });
      }
      if (result) {
        const token2 = jwt.sign(
          {
            email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
          },
          "123",
          {
            expiresIn: "1h"
          }
        );
        User.update({_id:user[0]._id},{$set:{token : token2 }},{new: true});

        return res.status(200).json({
          message: "Auth successful",
          token: token2
        });
      }
      res.status(401).json({
        message: "Auth failed"
      });
    });
  }
  catch(err){
    res.status(500).json({
      error: err
    });
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...