req.headers.authorization 在客户端设置正确,但在后端未定义

问题描述 投票:0回答:1

我有一个express/mongodB后端和一个sveltekit前端。在前端,我希望用户能够删除后端中属于他的一些项目。为此,我在用户登录后向客户端发送 cookie。但是,我使用服务器操作来删除该项目,并且根据我的研究,服务器无法访问 cookie。因此,我将其附加在操作内的标题中,如下所示

export const actions = 
{
 deleteItem: async({fetch,cookies}) => {
   let headers = new Headers();
   headers.append('Content-Type','application/json');
   const cookie = cookies.get('jwt');
   headers.append('authorization', cookie);
   const response = await fetch('path-to-backend',{
      method: 'DELETE',
      headers,
      credentials: "include"
   })
   }
}

在上面的代码中,我测试了cookie值为

console.log(cookie);

并且它提供了一个值(正确的值)。在后端,我有一个身份验证中间件来检查 jwt 令牌。在其中我检查标题为

console.log(req.headers);

我得到一个具有“授权”键的对象,并将令牌作为值。但是,当我尝试访问授权值

req.headers['authorization']
时,我得到了未定义的信息。

为什么?

express action sveltekit
1个回答
0
投票

请参阅下面的最小可重现示例,显示您的代码没有问题来完成工作。

服务器.js

const express = require('express');
const app = express();

app.use(express.static('./'));

app.delete('/a', (req, res) => {
  res.send(`Authorization : ${req.headers['authorization']}`);
});

app.listen(3000, () => console.log('L@3000'));

index.htm

<!DOCTYPE html>
<html>
  <head>
    Authorization header check
  </head>
  <body>
    <p></p>
  </body>
  <script>
    const headers = new Headers();
    const para = document.querySelector('p');
    headers.append('authorization', 'some jwt content');
    fetch('a', {
      method: 'DELETE',
      headers,
    })
      .then((response) => {
        if (!response.ok) {
          para.textContent = 'Error :' + response.status;
        }
        return response.text();
      })
      .then((data) => {
        para.textContent = data;
      });
  </script>
</html>

测试结果

Testing results

© www.soinside.com 2019 - 2024. All rights reserved.