根据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'};
});
我尝试了上面的代码,它适用于每个请求,但它似乎没有向请求标头添加任何内容。我怎样才能实现这个目标?我应该更改哪个属性?
编辑
OP刚刚澄清授权来自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)
}
})
}
}
})
尝试按以下方式进行作业:
Object.assign(event.node.req.headers, { Authorization: 'Bearer test' })