美文网首页
node express 如何让每个api都添加token验证

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

作者: Rogi | 来源:发表于2020-03-19 11:47 被阅读0次

    我用到的方法是自己手写的中间件,也可以使用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;
    

    相关文章

      网友评论

          本文标题:node express 如何让每个api都添加token验证

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