美文网首页
nodejs-jwt token认证

nodejs-jwt token认证

作者: autumn_3d55 | 来源:发表于2022-03-25 18:12 被阅读0次

1. 安装jwt插件

npm i express-jwt

2. 在app.js 使用中间件

  • 可剔除验证的路径
    app.js
const expressJwt = require('express-jwt');
//使用中间件验证token合法性
app.use(expressJwt({ secret: 'secret' }).unless({
path: ['/', '/api/user/token', '/api/admin/register', '/api/admin/login',/^\/wx\/.*/,/^\/images\/.*/], //除了这些地址,其他的URL都需要验证
}));

3. 在登录路由 使用

  • login.js
const express = require('express');
const router = express.Router();
// 数据库
let conn = require('../../db/conection');
let formatDate = require('../../utils/formatDate')
// JSON Web Token
const jwt = require("jsonwebtoken");

// 登录
router.post("/login", async (req, res) => {
    let { username, password } = req.body;
    let selectSql = `SELECT a.*,r.RID,r.RNAME
    FROM admin a
    left join admin_role ar on a.id=ar.admin_id
    LEFT JOIN role r on ar.role_id=r.RID
    WHERE a.username = '${username}' AND a.password = '${password}' `;
    let results = await conn(selectSql);
    // 账号密码错误
    if (!results.data.length) {
        res.json({
            status: false,
            msg: "账号或者密码错误!",
        });
        return false;
    }
    let { id } = results.data[0];
    // 更新登陆时间,登陆次数
    selectSql = `UPDATE admin SET login_count = login_count + 1 WHERE id = ${id};`;
    let result2 = await conn(selectSql);
    if (result2.data.affectedRows > 0) {
        // 登录成功
        let payload = {
            id,
            username,
        };
        // 生成token
        let token = jwt.sign(payload, "secret", { expiresIn: "4h" });
        res.json({
            status: true,
            msg: "登录成功!",
            data: {
                token,
                data: results.data[0]
            },
        });
    }
});

  • 注意:
    let token = jwt.sign(payload, "secret", { expiresIn: "4h" });
    payload: 载荷,
    secret:对应app.js的app.use(expressJwt({ secret: 'secret' })
    expiresIn:过期时长

相关文章

网友评论

      本文标题:nodejs-jwt token认证

      本文链接:https://www.haomeiwen.com/subject/wyhtjrtx.html