反应.headers根据JavaScript打包器返回不同的结构



我在Next.js 13项目中尝试使用不同的捆绑器,我正在为第三方API进行身份验证。我正在修补新的turbpack打包器,并得到了我的登录工作,但是当我切换到Webpack时,我的response.headers的结构完全不同,这导致使用登录cookie时出现问题,我从API成功返回。

使用turbpack,当我console.logresponse.headers时,我得到这样的东西:

Headers {
[Symbol(map)]: [Object: null prototype] {
'content-type': [ 'application/json; charset=utf-8' ],
'content-length': [ '1048' ],
...
'set-cookie': [..., ..., ...] // Array with a few strings
}

但是由于某些原因,切换回Webpack,标题的结构不同

[Symbol(headers map)]: Map(31) {
'content-type' => { name: 'Content-Type', value: 'application/json; charset=utf-8' },
'content-length' => { name: 'Content-Length', value: '1048' },
...
'set-cookie' => {
name: 'Set-Cookie',
value: '...', // One big string
},
}

使用turbpack,我通过response.headers.raw()['set-cookie']映射构建我的登录cookie在我的getAuth函数中使用

async function getAuth() {
const authUrl = '...'
const email = '...'
const password = '...'
const encryptedLogin = CryptoJS.enc.Base64.stringify(CryptoJS.SHA256(password + email))
const authReply: any = await fetch(authUrl, {
method: 'POST',
body: JSON.stringify({
email: email,
password: encryptedLogin,
}),
credentials: 'include',
headers: { Accept: '*/*', 'Content-type': 'application/json' },
})
const statusCode = authReply.status
if (statusCode === 200) {
console.log("Authentication successful")
} else {
console.log("Authentication failed")
}
let loginCookies = parseCookies(authReply)
return loginCookies
}
function parseCookies(response: any) {
return response.headers.raw()['set-cookie']
.map((entry: any) => {
const parts = entry.split(';')
const cookiePart = parts[0]    
return cookiePart
})
.join(';')
}

以上函数在使用turbpack时工作完美,但在使用Webpack时给出错误response.headers.raw is not a function。实际的身份验证仍然是成功的,但我不知道如何访问它创建的具有不同结构的cookie,我使用Webpack获得。

我从来没有处理过这样的事情,我真的很想使用Webpack,因为turbpack还在alpha阶段,还不兼容SCSS。我试图访问我需要使用response.headers.get('set-cookie')的值,但没有成功。

任何帮助或建议都非常感谢!如果我不能想出一个解决方案,我可能会咬紧牙关,切换回CSS和使用turbpack,因为它工作得很好。

response.headers.get('set-cookie')一起使用

function parseCookies(response: any) {
return response.headers.get('set-cookie')
.split(' ')
.map((entry: any) => {
const parts = entry.split(';')
const cookiePart = parts[0]    
return cookiePart
})
.join(';')
}

干得好,我。

相关内容

  • 没有找到相关文章

最新更新