node js token验证

安装 express-jwt

npm i express-jwt

安装 jsonwebtoken

npm i jsonwebtoken

引入到某一个js文件中

const expressJwt = require('express-jwt')
const jwt = require('jsonwebtoken')
//引入自己设定的过期事件以及密钥
const {
    PRIVATE_KEY,//钥匙
    EXPIRESD //过期时间
 } = require('./constants')
//加密
let token = jwt.sign({
    username: 'heyifan',
    type: '1',
    age: '22',
    school: 'zztl',
    time: Date.now()
}, PRIVATE_KEY, {
    expiresIn: EXPIRESD
})
console.log(token)

// 解密

jwt.verify(token, PRIVATE_KEY, (err, data) => {
    if (err) console.log(err)
    console.log(data)
})

封装成为验证以及解密的token 函数

const expressJwt = require('./node_modules/express-jwt')
const jwt = require('./node_modules/jsonwebtoken')
const {
    PRIVATE_KEY,//钥匙
    EXPIRESD //过期时间
} = require('./constants')
//加密
var setToken = (username, type, age, school) => {
    let token = jwt.sign({
        username,
        type,
        age,
        school,
        time: Date.now()
    }, PRIVATE_KEY//钥匙, {
        expiresIn: EXPIRESD//过期时间
    })
    return token
}

//解密
var verToken = (token) => {
    return jwt.verify(token, PRIVATE_KEY, (err, data) => {
        if (err) return 400
        return data
    })
}
//抛出两个函数
module.exports = {
    verToken,
    setToken
}
//白名单需求

app.js 部分代码

let no_router = ['/login', '/del_user', '/tests'] //声明白名单 
app.use(async (req, res, next) => {
    console.log(no_router.indexOf(req.url))
    if (no_router.indexOf(req.url) != -1) {//说明此为白名单不需要验证 直接走下一个路由
        // 在白名单中找到这个路由
        next()
    } else {
        var token = req.headers['authorization'] //如果没有在白名单 则取其token
        if (token == undefined) { //若token不存在 则返回登陆信息失效
            res.send({
                code: 4011,
                msg: '登陆信息失效,请重新登录'
            })
        } else {
            let jie = verToken(token)//存在 则 解析token 查询数据库 名字是否存在 
            
             try {
            if(jie!=400){
                                let info = await test.findOne({
                    where: {
                        name: jie.name
                    }
                })
                if (info != '') { //存在 则 走下一个路由 
                    next()
                } else {//不存在 说明并无此用户信息
                    res.send({
                        code: 4012,
                        msg: '登陆信息失效,请重新登录'
                    })
                }
            }
           

            } catch (error) {//报错
                console.log(error.message)
                res.send({
                    code: 4013,
                    msg: '登陆信息失效,请重新登录'
                })
            }
        }
        console.log("所有的请求都走了app.use这个中间件")
    }
})
app.use(expressJWT({
    secret: PRIVATE_KEY,
    algorithms: ['HS256']
}).unless({
    path: no_router //白名单 此路由白名单同上 依然不需要验证 是否过期 
}));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值