node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > node token生成

node中token的生成与解析配置

作者:爱编程的小学究

本文主要介绍了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生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文