Node.js 用户登录express js时如何更新令牌?

Node.js 用户登录express js时如何更新令牌?,node.js,express,collections,token,express-jwt,Node.js,Express,Collections,Token,Express Jwt,我想在用户登录时更新用户集合中的令牌。到目前为止,我已经试过了 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 fa

我想在用户登录时更新用户集合中的令牌。到目前为止,我已经试过了

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
      });
    });
});
router.post(“/login”,(请求、回复、下一步)=>{
User.find({email:req.body.email})
.exec()
。然后(用户=>{
if(user.length<1){
返回res.status(401).json({
消息:“身份验证失败”
});
}
bcrypt.compare(req.body.password,用户[0]。密码,(错误,结果)=>{
如果(错误){
返回res.status(401).json({
消息:“身份验证失败”
});
}
如果(结果){
const token2=jwt.sign(
{
电子邮件:用户[0]。电子邮件,iat:Math.floor(Date.now()/1000)-30
},
"123",
{
呼气蛋白:“1h”
}
);
update({token:token2})
.exec()
返回res.status(200).json({
消息:“验证成功”,
令牌:令牌2
});
}
res.status(401).json({
消息:“身份验证失败”
});
});
})
.catch(错误=>{
控制台日志(err);
res.status(500).json({
错误:错误
});
});
});
此处将生成新的令牌,但未将其保存在用户集合中。我想更新集合中的新令牌

有人知道我失踪在哪里吗?

试试以下方法:

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
    });
  }
});
router.post(“/login”),异步(req,res)=>{
试一试{
const user=wait user.find({email:req.body.email});
if(user.length<1){
返回res.status(401).json({
消息:“身份验证失败”
});
}
bcrypt.compare(req.body.password,用户[0]。密码,(错误,结果)=>{
如果(错误){
返回res.status(401).json({
消息:“身份验证失败”
});
}
如果(结果){
const token2=jwt.sign(
{
电子邮件:用户[0]。电子邮件,iat:Math.floor(Date.now()/1000)-30
},
"123",
{
呼气蛋白:“1h”
}
);
update({u-id:User[0].\u-id},{$set:{token:token2},{new:true});
返回res.status(200).json({
消息:“验证成功”,
令牌:令牌2
});
}
res.status(401).json({
消息:“身份验证失败”
});
});
}
捕捉(错误){
res.status(500).json({
错误:错误
});
}
});
尝试以下方法:

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
    });
  }
});
router.post(“/login”),异步(req,res)=>{
试一试{
const user=wait user.find({email:req.body.email});
if(user.length<1){
返回res.status(401).json({
消息:“身份验证失败”
});
}
bcrypt.compare(req.body.password,用户[0]。密码,(错误,结果)=>{
如果(错误){
返回res.status(401).json({
消息:“身份验证失败”
});
}
如果(结果){
const token2=jwt.sign(
{
电子邮件:用户[0]。电子邮件,iat:Math.floor(Date.now()/1000)-30
},
"123",
{
呼气蛋白:“1h”
}
);
update({u-id:User[0].\u-id},{$set:{token:token2},{new:true});
返回res.status(200).json({
消息:“验证成功”,
令牌:令牌2
});
}
res.status(401).json({
消息:“身份验证失败”
});
});
}
捕捉(错误){
res.status(500).json({
错误:错误
});
}
});
尝试以下代码:

      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
         });
       }
      );
如果有帮助,请告诉我。

请尝试以下代码:

      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
         });
       }
      );

如果有帮助,请告诉我。

首先了解为什么需要刷新令牌。创建令牌后,您可以将该令牌作为会话变量存储在web、移动设备内部存储器等中

您可以创建另一个令牌,而不是刷新令牌。
通过另一种方式,您可以为令牌设置超时。令牌在该时间段后将无效

首先了解为什么需要刷新令牌。创建令牌后,您可以将该令牌作为会话变量存储在web、移动设备内部存储器等中

您可以创建另一个令牌,而不是刷新令牌。
通过另一种方式,您可以为令牌设置超时。令牌在该时间段后将无效

从find中删除.exec(),这也是因为使用then时,我们不需要.exec()来执行查询,它将被执行。然后,您必须在then used for find之外运行更新查询。最好从find中使用async with await.remove.exec(),因为使用then时,我们不需要.exec()要执行查询,它将被执行。然后您必须在用于查找的外部运行更新查询。最好使用async with await。我可以知道您的
MongoDB
版本吗?我想您的更新是在执行
jwt.sign
之前进行的。看看你是否可以得到
jwt.sign
的任何回调。我可以知道你的
MongoDB
版本吗?我想你的更新发生在执行
jwt.sign
之前。查看您是否可以获得
jwt.sign
的任何回调。现在令牌没有得到打印,只有auth successful被打印。您可以放置控制台并检查令牌2的值吗@BhaktiThakkarnow令牌未获得打印仅打印身份验证成功您可以放置控制台并检查令牌2的值吗@巴克提萨卡