微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证从服务器发送的 jwt 令牌是否与用户发回的 NodeJS 相同

如何解决验证从服务器发送的 jwt 令牌是否与用户发回的 NodeJS 相同

我正在制作我的第一个 API,但对 jwt 令牌有点困惑。问题是,当用户登录应用程序时,我检查数据库中的数据,如果一切正确,我将用户 jwt 令牌发送回去,以便他们可以访问他们的个人信息,而无需每次都发送电子邮件和密码。但是我怎么知道令牌用户是否发回,是我发送给他们的令牌?当我将每个令牌发送给用户时,我是否应该将它们存储在我的服务器上,然后将它们与用户发送的令牌进行比较?处理此问题的最佳做法是什么?

解决方法

如果您将 MongoDB 与 mongoose 一起使用,您可以添加一个 Schema 方法来生成 jwt 并存储它,以及另一个检查该令牌的方法

const mongoose = require('mongoose');
const jwt = require('jsonwebtoken');

const UserSchema = new mongoose.Schema({
.....
})

UserSchema.methods.generateAuthToken = function () {
  const user = this;
  const token = jwt.sign({ email: user.email },process.env.JWT_SECRET).toString();
  return token;
};

UserSchema.statics.findByToken = function (token) {
  const user = this;
  const decoded = jwt.verify(token,process.env.JWT_SECRET);
  if (decoded.access === 'userEmail') {
    return user.findOne({
      email: decoded.email
    });
  } else {
    return Promise.reject();
  }
};

调用 user.generateAuthToken();验证后在您的控制器中

并在中间件中检查令牌

const { User } = require('path/to/model');

const authenticate = async (req,res,next) => {
  try {
    const token = req.headers.jwtToken;
    const user = await User.findByToken(token);
    if (!user) {
      return Promise.reject();
    }
    req.user = user;
    next();
  } catch (err) {
    return res.status(401).send(err);
  }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?