jsonwebtoken 自定义中间件

80 阅读1分钟
  思路:登录时候从后端拿取uuid进行jwt.sign加密发送给前端,前端拿着加密后的uuid保存到本地;首页每次需要执行操作时携带加密uuid到后端,后端以verify解密并验证,无误后与之数据库uuid进行匹配,随后返回与之有关信息.
  
  app.post('/api/login', (req, res) => {
    console.log(req.body);
    //后端验证
    var user = users.find(item => item.mobile == req.body.mobile && item.pwd == req.body.pwd);
    if (!user) {
        res.send({
            code: 0,
            message: '账号或者密码错误!'
        })
        return;
    }
    //验证成功之后发送加密之后uuid
    // 生成token标识  随机的   对某一个东西进行加密
    // 第一个参数是加密的数据   第二个参数加密时使用的密钥
    var token = jwt.sign({ uuid: user.uuid }, 'abc', {
        expiresIn: 10,  // 过期时间  10秒
        // expiresIn: '1h',  // 过期时间  1小时
        // expiresIn: '1d',  // 过期时间  1天
    })
    console.log(token);  
    res.send({
        code: 1,
        token,
    })
})
//首页
 app.get('/api/user', checkToken, (req, res) => {
    console.log(req.headers.uuid);
    var user = users.find(item => item.uuid == req.headers.uuid);
    res.send({
        code: 1,
        data: {
            name: user.name,
            mobile: user.mobile
        }
    })
})

// 自定义中间件
function checkToken(req, res, next) {
    jwt.verify(req.headers.token, 'abc', (err, data) => {
        if (err) {  // 凭证无效或者过期
            res.send({
                code: 0,
                message: 'token无效'
            })
            return;
        }
        req.headers.uuid = data.uuid;(data.uuid是验证无误后的uuid)
        next();
    })
}