• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

token为空,但jwt并没有报错

武飞扬头像
看起来怪怪的
帮助1

       在写一个管理系统的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

  1.  
    // 安全拦截器
  2.  
    const jwt = require("jsonwebtoken");
  3.  
     
  4.  
    /**
  5.  
    * 验证权限
  6.  
    * @param token
  7.  
    * @param secretkey 秘钥
  8.  
    * @param success
  9.  
    * @param error
  10.  
    */
  11.  
    function verify(token, secretkey) {
  12.  
    console.log(token)
  13.  
    return new Promise((resolve, reject) => {
  14.  
    jwt.verify(token, secretkey, function (err, decode) {
  15.  
    if (err) {
  16.  
    console.log('[verifyErr]')
  17.  
    reject(err);
  18.  
    } else {
  19.  
    resolve(decode);
  20.  
    }
  21.  
    })
  22.  
    }).catch(e =>{
  23.  
    console.log('[verifyCatchErr]')
  24.  
    console.error(e)
  25.  
    throw new Error('令牌已过期')
  26.  
    })
  27.  
    }
  28.  
     
  29.  
    /**
  30.  
    * 签名
  31.  
    * @param load 载荷 json对象 存储存在
  32.  
    * @param secretkey 秘钥
  33.  
    * @param expiresIn 过期时间 秒
  34.  
    * @returns {number | PromiseLike<ArrayBuffer>}
  35.  
    */
  36.  
    function sign(load, secretkey, expiresIn) {
  37.  
    var token = jwt.sign(load, secretkey, {expiresIn: expiresIn});
  38.  
    return token;
  39.  
    }
  40.  
     
  41.  
    module.exports = {verify, sign};
学新通

问题出在verify的promise

promise参数的位置是固定的

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

错误写法:

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgckbia
系列文章
更多 icon
同类精品
更多 icon
继续加载