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中 npm常用命令详解

    Nodejs中 npm常用命令详解

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。接下来通过本文给大家介绍nodejs中 npm常用命令
    2016-07-07
  • Nodejs初级阶段之express

    Nodejs初级阶段之express

    这篇文章主要介绍了Nodejs初级阶段之express的相关资料,需要的朋友可以参考下
    2015-11-11
  • 利用yarn代替npm管理前端项目模块依赖的方法详解

    利用yarn代替npm管理前端项目模块依赖的方法详解

    这篇文章主要给大家介绍了关于利用yarn代替npm管理前端项目模块依赖的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • React和Node.js快速上传进度条功能实现

    React和Node.js快速上传进度条功能实现

    这篇文章主要为大家介绍了React和Node.js快速上传进度条功能实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • node.js学习之事件模块Events的使用示例

    node.js学习之事件模块Events的使用示例

    Nodejs中不存在浏览器中冒泡,捕获这些行为,Nodejs中实现了events这个模块,Nodejs中大多数模块都集成了这个模块,所以events是Nodejs中最重要的一个模块。这篇文章主要给大家介绍了关于node.js学习教程之事件模块Events的相关资料,需要的朋友可以参考下。
    2017-09-09
  • NodeJs 模仿SIP话机注册的方法

    NodeJs 模仿SIP话机注册的方法

    这篇文章主要介绍了NodeJs 模仿SIP话机注册的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • nodejs如何获取时间戳与时间差

    nodejs如何获取时间戳与时间差

    本文详细介绍了nodejs获取时间戳与时间差的多种方法,对平时nodejs的使用很有帮助,下面一起来看看吧。
    2016-08-08
  • Node.js设置CORS跨域请求中多域名白名单的方法

    Node.js设置CORS跨域请求中多域名白名单的方法

    这篇文章主要介绍了Node.js设置CORS跨域请求中多域名白名单的方法,文中通过示例代码介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • node版本快速切换及管理方法

    node版本快速切换及管理方法

    这篇文章主要为大家介绍了node版本快速切换及管理方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Node.js读取和写入文件的代码示例

    Node.js读取和写入文件的代码示例

    在现代前端开发中,Node.js已经成为不可或缺的一部分,其高效的非阻塞I/O模型使得它非常适合处理文件操作,在这篇博客中,我们将探讨如何使用Node.js读取和写入文件,我们会涉及基本的文件系统模块,并提供可运行的代码示例,以便您可以轻松上手
    2024-11-11

最新评论