我有一个基于Vertx的后端。我的基本路由器获得以下cors处理程序:
val corsHandler = CorsHandler.create().addOrigin("http://localhost:5173")
router.route().handler(
corsHandler
.allowedMethod(HttpMethod.GET)
.allowedMethod(HttpMethod.POST)
.allowedMethod(HttpMethod.PUT)
.allowedMethod(HttpMethod.DELETE)
.allowedHeader("Content-Type")
.allowedHeader("Authorization")
.allowedHeader("Cookie")
.allowCredentials(true)
)
我们化简一下,假设我只有两个端点。我们称他们为auth和streamer。当我发送一个post请求来验证时,它会验证用户并以以下方式向响应添加httpOnly Cookie:
val cookie = Cookie.cookie("token", token)
.setHttpOnly(true).setMaxAge(600_000).setDomain("localhost")
ctx.response().addCookie(cookie)
ctx.response().setStatusCode(HttpStatus.SC_OK).setStatusMessage("Successfully authenticated!").end()
其中ctx是RoutingContext。我有这些取回请求:
export async function authenticateUser(user: UserRequest): Promise<Response> {
const response = await fetch(`http://localhost:8080/auth/authenticate`, {
method: "POST",
mode: "cors",
body: JSON.stringify(user),
headers: {
"Content-Type": "application/json"
},
credentials: "include"
})
return response
}
export async function getStreamersFromServer(): Promise<RawTwitchInfo[]> {
const data = await fetch(`http://localhost:8080/restApi/streamers`, {
method: "GET",
mode: "cors",
credentials: "include",
}).then((response: Response) => {
if(response.ok) {
return response.json() as unknown as RawTwitchInfo[]
} else {
console.log(response.statusText)
}
})
return data
}
我的问题是,经过身份验证后,我可以看到cookie被设置(在网络选项卡上),如果我发送另一个身份验证请求,cookie存在于报头中,但是它不被添加到我的streamers请求。
这是因为路径不匹配,所以cookie没有被传输。
将.setPath("/")
添加到Add cookie方法中-这样cookie将通过不同的路由发送