我需要在回调函数外使用一个变量

tkqqtvp1  于 2021-06-08  发布在  Redis
关注(0)|答案(0)|浏览(168)

这个问题在这里已经有答案了

为什么我的变量在我在函数中修改后是不变的异步代码参考(6个答案)
如何从异步调用返回响应(42个答案)
三个月前关门了。
我正在使用node.js-express。我已经把我的jwt活动代币储存在我的redis商店里了。现在我试图检查jwt是否作为我以前存储的集合中的一个成员存在。我正在node.js中使用redis官方包。

"dependencies": {
    "cookie-parser": "^1.4.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "jsonwebtoken": "^8.5.1",
    "nodemon": "^2.0.4",
    "redis": "^3.0.2"
  }

我已经用php为同一个web应用程序编写了代码,我使用了相同的方法,并以某种方式使其工作。现在我把我的代码转移到node.js,我在他们的官方文档中没有找到redis client的一些命令,但仍然发现我可以使用client.sismember。如果集合有值,则可以从回调函数获取结果。
但是我需要在回调函数之外使用它,我也尝试将它作为一个全局变量写在函数内部,并尝试在回调函数之外获取它,我收到了 undefined 因此。然后尝试在函数内部传递变量,但是( verifyToken )在回调函数中执行,它与在回调函数中编写代码并返回相同 undefined 什么时候 verifyUser(token) 函数被调用。

function verifyUser(token) {
    if (!token) {
        return false
    }
    // creating redis client
    try {
        client = redis.createClient(
            process.env.REDIS_PORT,
            process.env.REDIS_HOST,
            { no_ready_check: true }
        );

        client.auth(process.env.REDIS_PASSWORD)
    } catch (error) {
        return false
    }

    var tokenIsActive

    client.sismember("active-tokens", token, (err, tokenFound) => {
        if (tokenFound) {
            tokenIsActive = true
            return verifyToken(token, tokenIsActive)
        }
        else {
            tokenIsActive = false
            return verifyToken(token, tokenIsActive)
        }
    })
    console.log(tokenIsActive) //the global variable - this doesn't work too. it gives the result as undefined
}

function verifyToken(token, tokenIsActive){
    if (tokenIsActive){
        try {
            var verifiedUser = jwt.verify(token, process.env.SECRET_KEY);
            return verifiedUser
        } catch (error) {
            return false
        }
    }
    else{
        return false
    }
}

我所需要的就是。如果我调用函数 verifyUser(token) ,它必须返回 true 如果用户是授权用户,其他 false 如果用户不是授权用户。
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题