反应本地获取Cookie

sun*_*unt 6 cookies react-native

我已经使用fetch()登录到服务器,我想知道如何获取cookie。

我知道我可以使用“ document.cookie ”在Web浏览器开发中获取cookie,但是在响应本机开发中如何?非常感谢你。

jne*_*orf 6

我只是遇到了同样的问题。我的第一种方法是从响应标题中手动获取cookie。自从Headers.prototype.getAll删除以来,这变得更加困难(请参阅此问题)。详细信息在下面进一步显示。

可能不需要获取和解析Cookie

首先,我要提到的是,下面所有的cookie解析都是不必要的,因为React Nativefetch上的实现会自动发送cookie(如果密钥设置正确)。因此,会话保持不变(就像在浏览器中一样),并且进一步的es可以正常工作。不幸的是,关于网络的React Native文档没有明确告诉您它将立即可用。它只说:“ React Native提供了Fetch API来满足您的网络需求。”credentialsfetch

第一种方法

因此,我编写了一个辅助函数:

// 'headers' is iterable
const get_set_cookies = function(headers) {
    const set_cookies = []
    for (const [name, value] of headers) {
        if (name === "set-cookie") {
            set_cookies.push(value)
        }
    }
    return set_cookies
}

fetch(url, {
    method: "POST",
    credentials: "same-origin", // or 'include' depending on CORS
    // ...
})
.then(response => {
    const set_cookies = get_set_cookies(response.headers)
})
Run Code Online (Sandbox Code Playgroud)

要将cookie字符串解析为对象,我使用了set-cookie-parser。这样我想像手动发送回饼干

import SetCookieParser from "set-cookie-parser"

const cookies_to_send = set_cookies
    .map(cookie => {
        const parsed_cookie = SetCookieParser.parse(cookie)
        return `${cookie.name}=${cookie.value}`
    })
    .join('; ')

fetch(url, {
    method: "POST",
    credentials: "same-origin", // or 'include' depending on CORS
    headers: {
        Cookie: cookies_to_send,
        // ...
    },
    // ...
})
Run Code Online (Sandbox Code Playgroud)