如何使用服务器中间件更改请求标头

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

根据Nuxt 3的服务器目录文档,服务器中间件可用于更改请求标头。我想添加授权标头并通过服务器中间件将不记名令牌附加到我的请求中。

// /server/middleware/auth.js
export default defineEventHandler((event) => {
  event.context.authorization = 'Bearer test';
  event.node.req.headers = {...event.node.req.headers, Authorization:'Bearer test'};
});

我尝试了上面的代码,它适用于每个请求,但它似乎没有向请求标头添加任何内容。我怎样才能实现这个目标?我应该更改哪个属性?

nuxt.js nuxtjs3 nuxt3 nuxt-middleware
2个回答
2
投票

编辑

OP刚刚澄清授权来自cookie会话。

存储在浏览器中的 cookie 示例。

您可以使用

useRequestHeaders
可组合

在浏览器中请求API时,会是这样的。

<script lang="ts" setup>
const { data } = await useFetch('/api/test', {
  headers: useRequestHeaders(['cookie'])
})
</script>
<template>
  <div>
     Hello World
  </div>
</template>

在您的服务器中间件中,例如

~/server/middleware/log.ts

export default defineEventHandler((event) => {
    const requestedURL = getRequestURL(event)
    if (requestedURL.pathname === '/api/test') {
        const cookieHeaders = getHeader(event, 'cookie')
        // console.log(cookieHeaders)
        if (cookieHeaders) {
            const cookieArr = cookieHeaders.split(';').map((c) => c.trim()) // ensure to remove white spaces
            cookieArr.forEach((cookie) => {
                // console.log(cookie)
                if (cookie.startsWith('authorization')) {
                    console.log(cookie)
                }
            })
        }
    }
})


0
投票

尝试按以下方式进行作业:

Object.assign(event.node.req.headers, { Authorization: 'Bearer test' }) 

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