Ktor 响应标头显示 Set-Cookie 的 null

Ktor Response Headers showing null for Set-Cookies

提问人:H Zaman 提问时间:10/22/2023 更新时间:10/23/2023 访问量:50

问:

我正在制作一个 Gradle KotlinJS 应用程序,我是 Kotlin 的新手。我正在使用 Ktor ping 一个 API 来登录,通过查看浏览器记录,我在标头中收到作为 Set-Cookie 的返回令牌。“_backend_session=......”

但是,当我尝试获取此 SetCookie 时,使用提供的函数 res.SetCookie(),我得到一个空列表。我尝试了各种从标题等获取它的方法,但是当我记录它们时,标题似乎特别空,我无法弄清楚为什么。

我的代码:

suspend fun login(username: String, password: String): Pair<HttpStatusCode, Json> {
    val client = HttpClient(Js) {
        install(HttpCookies)
        install(ContentNegotiation) { json(Json) }
    }
    val userData = User(user = UserData(username = username, password = password))

    val response: HttpResponse = client.post("$backend/users/sign_in") {
        headers {
            append(HttpHeaders.AccessControlAllowOrigin, "*")
            append("response_type", "code")
        }
        contentType(ContentType.Application.Json)
        setBody(userData)
    }

    console.log(response.setCookie())

    return Pair(response.status, JSON.parse(response.body()))
}
kotlin gradle httpresponse ktor response-headers

评论


答:

1赞 Aleksei Tirman 10/23/2023 #1

如果在浏览器环境中运行代码,则浏览器会阻止前端 Javascript 代码访问标头:Set-Cookie

来自 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

警告:浏览器会阻止前端 JavaScript 代码访问 Set-Cookie 标头,这是 Fetch 规范的要求,该规范将 Set-Cookie 定义为禁止的响应标头名称,必须从暴露给前端代码的任何响应中筛选出来。

评论

0赞 H Zaman 10/24/2023
谢谢!我忙于查找 ktor 文档,忘记查找 SetCookies。