这个问题在这里已经有答案了:
为什么我的变量在我在函数中修改后是不变的异步代码参考(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
如果用户不是授权用户。
提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!