发布于 4年前

node express 如何让每个api都添加token验证

我用到的方法是自己手写的中间件,也可以使用express-jwt中间件进行验证

  • 封装一个中间件然后暴露出去
const mysql = require('../table/user')
module.exports = ((req, res, next) => {
    // 获取当前访问的api地址
    const url = req.originalUrl
    // 不需要进行验证的api
    var urlArr = ['/api/Applets/login']
    // 验证当前的api是否存在不需要验证的api的列表里面
    var is_next = urlArr.find(item => item === url)
    if (is_next) {
        next()
        return false
    }
    // 获取api传递过来的token
    const token = req.headers.token || ''
    // 获取api传递用户id
    const uid = req.body.uid || ''
    // 基本检测,token和id都不允许为空
    switch(true) {
        case token === '':
            return res.status(401).json({
                msg: 'wdnmd token 呢'
            })
        case uid === '':
            return res.status(401).json({
                msg: 'wdnmd id 呢'
            })
        default:
   }
    // 进行数据库检测
    const sql = `SELECT * FROM users WHERE id = ${uid} AND token LIKE '${token}'`
    mysql.query(sql, function (error, results, fields) {
        if (results[0]) {
            next()
        } else {
            return res.status(401).json({
                msg: 'wdnmd先登录啊闸总'
            })
        }
    })
})
  • 定义并且使用中间件
var express = require('express');
var app = express.Router();
var Applets = require('./Applets/home.js');
var qiniu = require('./qiniu/qiniu.js');
var expressJWT = require('express-jwt');
const bodyParser=require("body-parser");
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
// 全局验证
var detectToken = require('../Middleware/detectToken');

app.use(jsonParser);
app.use(urlencodedParser);
// 全局验证
app.use(detectToken); 

//配置路由
app.use('/Applets', Applets);
app.use('/qiniu', qiniu);
module.exports = app;
  • 当然,这个是全局的验证,如果是局部,针对单个api也可以这样子来使用
var express = require('express');
var router = express.Router();
const gethollowList = require('../../api/Applets/gethollowList')
var detectToken = require('../../Middleware/detectToken');
// 对单个api进行验证可以去掉中间件的验证api地址,保留基本验证和mysql验证就好了
router.post('/gethollowList',detectToken , function(req,res){
    const data = req.body
    gethollowList(data, res)
});
distribution()
module.exports = router;
©2020 edoou.com   京ICP备16001874号-3