代码之家  ›  专栏  ›  技术社区  ›  Someone

如何使用fetch发送cookie并修复404 post错误?

  •  0
  • Someone  · 技术社区  · 2 年前

    如何使用fetch发送cookie并修复404 post错误? 你好我试图向使用jwt令牌进行授权的服务器发送帖子,但我收到了404帖子。 以下是设置令牌和用户的逻辑:

    app.use((req, res, next)=>{
      const jwtToken = req.cookies.JWT_TOKEN;
    
      if(!jwtToken) {
        next();
        return;
      }
    
      jwt.verify(jwtToken, SECRET, (err, decoded)=>{
        if(err) {
          next(err);
          return;
        }
        const sessionData = decoded.data;
        let userId;
    
        if (sessionData['modx.user.contextTokens']) {
          if (sessionData['modx.user.contextTokens']['web'] > 0) {
            userId = sessionData['modx.user.contextTokens']['web'];
          }else if($dataarr['modx.user.contextTokens']['mgr'] > 0) {
            userId = sessionData['modx.user.contextTokens']['mgr'];
          } else {
            return redirect('/signin');
          }
        }
    
        req.user = {userId};
        next();
      });
    });
    
    app.use((req, res, next)=>{
      if (!req.user || !req.user.userId) {
        next(new Error('Access Denied'));
      } else {
        next();
      }
    });
    

    下面是已经存在的get请求,它可以正常工作:

    app.get("/:id?", function(req, res){
      const room = {id:parseInt(req.params.id||0)};
      const userid = req.user.userId;
    
      console.log('USEEEEEEEEEEEEEEEEEEEEEEEEEER ID', userid);
    
      pool.query("SELECT * FROM modx_user_attributes WHERE id = ?", [userid], function(err, [userData]) {
        if(err) return console.log(err);
        //console.log('userData', userData);
    
        const token = jwt.sign({
          data: {userId: userid},
        }, SECRET);
    
        res.render("index.hbs", {
            appdata: {token, room, user: userData},
            final scripts,
        });
      });
    });
    

    app.post('/writeVideo', (req, res) => {
        req.video.mv('test.wav', (err) => {
          if (err) {
            res.send(err);
          } else {
            res.send({
              success: 'file write'
            })
          }
        });
    })
    

    在这里,我想强调一点:

    fetch('/writeVideo', {
                method: 'POST',
                credentials: "same-origin",
                headers: {
                  'Content-type': 'application/json',
                },
                body: {
                  user: {
                    userId: 8
                  },
                  video: audioBlob
                }
              }).then(data => data.json()).then(data => console.log(data));
    

    我读了一点,他们建议只使用凭据:“同源”| |“包含”,但这对我不起作用,我尝试以不同的方式设置Cookie标题:“JWT_TOKEN=TOKEN”——但没有起作用。请告诉我该怎么做。

    非常感谢。

    0 回复  |  直到 2 年前