Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Jsonwebtoken验证导致NGINX超时_Node.js_Reactjs_Nginx_Jwt_Passport.js - Fatal编程技术网

Node.js Jsonwebtoken验证导致NGINX超时

Node.js Jsonwebtoken验证导致NGINX超时,node.js,reactjs,nginx,jwt,passport.js,Node.js,Reactjs,Nginx,Jwt,Passport.js,我正在处理的应用程序的通用技术堆栈是NodeJS后端、React前端和NGINX,用于反向代理来链接两者。所有集装箱均采用docker compose 我似乎遇到的问题是,当我尝试验证存储在仅HTTP cookie中、在API请求时传递到后端的JWT时,它在验证时被阻塞,导致超时。具体而言,此错误: 6#6:*4从上游读取响应头时,上游过早关闭连接,客户端:172.27.0.1,服务器:,请求:“POST/api/api/v1/getUserInfo HTTP/1.1”,上游:http://17

我正在处理的应用程序的通用技术堆栈是NodeJS后端、React前端和NGINX,用于反向代理来链接两者。所有集装箱均采用docker compose

我似乎遇到的问题是,当我尝试验证存储在仅HTTP cookie中、在API请求时传递到后端的JWT时,它在验证时被阻塞,导致超时。具体而言,此错误:

6#6:*4从上游读取响应头时,上游过早关闭连接,客户端:172.27.0.1,服务器:,请求:“POST/api/api/v1/getUserInfo HTTP/1.1”,上游:http://172.27.0.2:8080/api/v1/getUserInfo,主机:“本地主机”,推荐人:http://localhost/account“

我已经尝试在nginx中增加proxy\u read\u timeout/proxy\u send\u timeout,但似乎没有帮助

以下是我的JWT签名功能:

var privateKEY='testkey';
常量颁发者:字符串='test123';
const受众:字符串='test123';
module.exports={
符号:(有效载荷:任意)=>{
//令牌签名选项
var signOptions={
发行人:发行人,
观众:观众,,
expiresIn:“12h”//12小时有效期
};
返回jwt.sign(有效载荷、私钥、signOptions);
}
}
我如何调用该函数:

const-token=jwt.sign({
id:user.\u id,
firstName:user.firstName,
角色:user.role
});
我如何从cookie中获取令牌:

var cookieExtractor=函数(请求:请求){
var-token=null;
if(请求和请求cookie){
令牌=请求cookies[“令牌”];
}
返回令牌;
};
常量颁发者:string=“test123”;
常量受众:string=“test123”;
变量选项={
secretrokey:'testkey',
发行人:发行人,
观众:观众,,
jwtFromRequest:cookieExtractor
};
我的Passport JWT战略:

passport.use(
“jwt”,
新jwt策略(选项,(jwt_有效载荷,完成)=>{
findOne({{u id:jwt\u payload.id},(err,user)=>{
如果(错误){
返回完成(错误、错误);
}
如果(用户){
返回完成(空,用户);
}否则{
返回完成(null,false);
}
});
})
);
我如何调用身份验证:

app.post(`${versioning}/updateUserInfo`,(请求:请求,回复:响应)=>{
authenticate(“jwt”{session:false},(err,user,info)=>{
*在这里插入代码*
});
});
当我跟踪代码时,它似乎会在passport jwt库中的jwt.verify调用处暂停,然后再也无法通过该调用。我是JWT的新手,所以可能在这一过程中我做错了什么,我就是不明白为什么这一切突然停止了工作(这是一个次要项目,我上一次做它是在~1周前,这个问题从未发生过)

编辑

对于那些同样经历过这种情况的人,我从来没有找到一个明确的理由来解释原因。我更新了我的jsonwebtoken库,并停止使用Passport进行JWT验证,它开始为我工作。这是我现在使用的JWT验证方法,而不是Passport方法

verifyTokenOnly: (token: any, cb: any) => {
    jwt.verify(
        token,
        publicUserKey,
        { audience: audience, algorithms: ["RS256"] },
        (err: any, jwt_payload: any) => {
            if (err || !jwt_payload) {
                cb(err, null);
            } else {
                UserModel.findOne({ _id: jwt_payload.sub }, (err, user) => {
                    if (err) {
                        cb(err, null);
                    }

                    if (user) {
                        cb(null, user);
                    } else {
                        cb(null, false);
                    }
                });
            }
        }
    );
},

除此之外,我没有真正改变任何事情,它开始起作用,从那以后就再也没有发生过

你好。你有其他信息可以分享吗?也许直到现在你还发现了别的东西:-?我遇到了相同的问题,无法将其链接到任何particularity@AndreiTerecoasa不幸的是,我从来没能真正把它记下来。我用我修改过的内容编辑了我的原始帖子,但从那以后我再也没有遇到过任何问题。