node中token的生成与解析配置

 更新时间:2025年09月08日 15:37:46   作者:爱编程的小学究  
本文主要介绍了node中token的生成与解析配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在用户登录成功之后为了记录用户的登录状态通常会将用户信息编写为一个token,通过解析token判断用户是否登录。

token的生成

JSON Web Token(JWT) 是一种基于JSON的轻量级身份验证和授权机制。它是一种开放标准(RFC 7519),用于在网络应用中传递声明。

1 安装

npm i jsonwebtoken

2 引入jwt

const jwt = require("jsonwebtoken");

3 使用jwt,生成token

const jwt = require("jsonwebtoken");
// 获取secret秘钥
const config = require("../config.js");
const expiresIn = '1h' // token有效期

// 对用户信息进行加密 生成token
const generateToken = (user) => {
  const token = jwt.sign(
    {
      user_id: user.id,
      role: user.role,
    },
    config.SECRET_KEY,
    { expiresIn:expiresIn }
  );
  return 'Bearer ' + token;
};

4 对用户信息进行token化处理 对用户信息处理的时候,推荐将用户密码与头像信息去掉

// 登录
exports.login = (req, res) => {
  const userinfo = req.body;
  if (!userinfo.username || !userinfo.password) {
    return res.send({
      message: "用户名或者密码不能为空!",
      status: 0,
    });
  }
  const sqlStr = `select * from user where username=?`;
  db.query(sqlStr, [userinfo.username], (err, results) => {
    if (err) {
      res.handleResult(err.message);
    } else if (results.length > 0) {
      const password = results[0].password;
      const isExit = bcrypt.compareSync(userinfo.password, password);
      if (isExit) {
        // 对用户信息处理的时候,推荐将用户密码与头像信息去掉
        const user = { ...results[0], password: "", avatar: "" };
        // 生成token
        const token = generateToken(user);
        res.handleResult("登录成功!", 0,token);
      } else {
        res.handleResult("密码不正确!");
      }
    } else {
      res.handleResult("用户不存在!");
    }
  });
};

解析token

1 安装

npm i express-jwt@5.3.3

2 引入expressJWT

const expressJWT = require("express-jwt");

3 使用expressJWT,解析token 需要注意的是token解析配置,必须在路由配置前设置

const expressJWT = require('express-jwt')
const config = require('./config')

// 配置token解析
// unless中的path 除了这个地址,其他的URL都需要验证token
app.use(expressJWT({secret: config.SECRET_KEY}).unless({path: ['/api/login']  }));

问题描述

在使用express-jwt的过程中遇到了如下问题

该问题由 6.0.0 版本 更改引起。

方案一: 配置algorithms参数

在提供第三方库作为机密时,需要 algorithms 参数来防止潜在的降级攻击。

expressJwt({ secret: config.SECRET_KEY, algorithms: ['RS256'] });

方案二: 降低express-jwt的版本

npm i express-jwt@5.3.3

到此这篇关于node中token的生成与解析配置的文章就介绍到这了,更多相关node token生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nodejs异步回调的优雅处理方法

    Nodejs异步回调的优雅处理方法

    这篇文章主要介绍了Nodejs异步回调的优雅处理方法,本文使用了ES6中的新特性,用一种十分优雅的方式解决了回调问题,需要的朋友可以参考下
    2014-09-09
  • Egret引擎开发指南之创建项目

    Egret引擎开发指南之创建项目

    Egret Engine(白鹭引擎)是一款使用TypeScript语言构建的开源免费的移动游戏引擎。白鹭引擎的核心定位是开放,高效,优雅。通过它,你可以快速地创建HTML5类型的移动游戏,也可以将游戏项目编译输出成为目标移动平台的原生游戏应用。
    2014-09-09
  • Node.js中的缓存机制:原理与应用详解

    Node.js中的缓存机制:原理与应用详解

    本文将深入探讨缓存机制在 Node.js 中的应用,包括其原理、实现方式和最佳实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Node.JS利用PhantomJs抓取网页入门教程

    Node.JS利用PhantomJs抓取网页入门教程

    现今,网页抓取已经是一种人所共知的技术了,然而依然存在着诸多复杂性,下面这篇文章主要给大家介绍了Node.JS利用PhantomJs抓取网页的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • node NPM库promise 异步任务状态管理

    node NPM库promise 异步任务状态管理

    这篇文章主要介绍了node NPM库promise 异步任务状态管理
    2023-07-07
  • 一文秒懂nodejs中的异步编程

    一文秒懂nodejs中的异步编程

    这篇文章主要介绍了深入理解nodejs中的异步编程,本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • vscode+nodejs+express搭建一个简单网站(附详细图文教程)

    vscode+nodejs+express搭建一个简单网站(附详细图文教程)

    作为前端开发,Nodejs已经成了很多公司对我们这一岗位的硬性要求,而Express框架则是其中知名度最高、也是最受欢迎的Nodejs开发框架,这篇文章主要介绍了vscode+nodejs+express搭建一个简单网站的相关资料,需要的朋友可以参考下
    2026-01-01
  • Node.js搭建Https服务过程详解

    Node.js搭建Https服务过程详解

    这篇文章主要为大家介绍了Node.js搭建Https服务过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Node.js中使用jQuery的做法

    Node.js中使用jQuery的做法

    在Node.js中使用jQuery的做法,需要先安装jquery,npm install jquery ,安装后的版本是 3.1.0,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-08-08
  • Nodejs如何进行性能监控和分析优化

    Nodejs如何进行性能监控和分析优化

    Node.js应用可能因为高并发、内存泄漏、CPU密集型任务等原因导致性能下降,影响用户体验甚至系统稳定性,通过性能监控和分析,我们可以及时发现潜在问题,并针对性地进行优化,确保系统正常运行且具备良好的性能表现
    2024-06-06

最新评论