token为空,但jwt并没有报错

       在写一个管理系统的token权限的时候,遇到一个问题。明明没有进行登录,直接去访问它的后台页面,但是并没有被拦截。在检查一遍后发现了一个小失误。

        1.这是拦截的代码(这里并没有错误,可以正常使用)

app.all("*",async function (req, res, next) {
    let url = req.url
    console.log('[请求url:]'+url)
    let method = req.method.toUpperCase()
    console.log('[请求method:]'+method)
    if (method == 'GET'){
        let query = req.query
        for (let key in query){
            console.log(`[请求参数:]${key}=${query[key]}`)
        }
    } else if(method == 'POST'){
        let body = req.body
        for (let key in body){
            console.log(`[请求参数:]${key}=${body[key]}`)
        }
    }
    //令牌验证
    //checkUrl是封装的一个api
    if (_t.checkUrl(req,['/user/login'])){
        console.log('[令牌验证]')
        let token = req.query.token || req.headers.token
        console.log('[header]'+token)
        let result = await _t.verify(token || 1,global.secret)
        console.log(`[请求结果]${JSON.stringify(result)}`)
        //将请求对象重新缓存到请求头,备用
        req.headers.user = result
        console.log('[req-header]'+req.headers.user)

    }
    next()
});

//封装的

//个人觉得这个很有意思

tools.checkUrl = ({url},except = [])=>{
    for (let i= 0, l = except.length;i < l;i++ ){
        if (url.startsWith(except[i])){
            console.log('token')
            return false
        }
    }
    return true
}

jwtutil.js

// 安全拦截器
const jwt = require("jsonwebtoken");

/**
 * 验证权限
 * @param token
 * @param secretkey 秘钥
 * @param success
 * @param error
 */
function verify(token, secretkey) {
    console.log(token)
    return new Promise((resolve, reject) => {
        jwt.verify(token, secretkey, function (err, decode) {
            if (err) {
                console.log('[verifyErr]')
                reject(err);
            } else {
                resolve(decode);
            }
        })
    }).catch(e =>{
        console.log('[verifyCatchErr]')
        console.error(e)
        throw new Error('令牌已过期')
    })
}

/**
 * 签名
 * @param load 载荷 json对象 存储存在
 * @param secretkey 秘钥
 * @param expiresIn 过期时间 秒
 * @returns {number | PromiseLike<ArrayBuffer>}
 */
function sign(load, secretkey, expiresIn) {
    var token = jwt.sign(load, secretkey, {expiresIn: expiresIn});
    return token;
}

module.exports = {verify, sign};

问题出在verify的promise

promise参数的位置是固定的

return new Promise((resolve, reject) => {}

错误写法:

return new Promise((reject,resolve) => {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值