Cookie 未在 Scala Play 中设置

Cookie not setting in Scala Play

我试图在使用 scala play 框架时根据响应设置 cookie。我正在创建一个名为 session 的 cookie,它的值是一个 UUID(我知道 play 有它自己的 session 管理)。 我可以看到响应 header 包含设置 cookie 指令,但 cookie 未设置。

下面是设置cookie的控制器中action中的scala代码

val cookie= Cookie("session",
    sessionToken,
    httpOnly=true,
    sameSite=Some(Cookie.SameSite.Lax))

Ok(Json.toJson(res))
  .withCookies(cookie)
// Also tried with .bakeCookies() after the withCookies() call

我可以在 FireFox 和 Chrome 的响应中看到 cookie header。他们都在其开发人员工具中各自的响应 cookie 查看器中显示了看似正确格式的 cookie。

Set-Cookie: session=c0174ed1-ebd3-4a8d-a5b2-5b09a3fe616b; SameSite=Lax; Path=/; HTTPOnly

但是,在这两种浏览器中都没有设置 cookie。我试过 true 和 false httpOnly,并弄乱了 maxAge 值。我尝试将域设置为 url,然后在主机文件 as suggested here.

中设置 url

反应前端的 URL 是

http://localhost:49161/login/hydrate

而游戏中的终点是

http://localhost:49162/user/login/rehydrate

我也尝试在 cookie

上将路径设置为 /login/hydrate/

前端的react代码

     // Inside async function
     // methodStrings[method] = "post" in this request
     axios[methodStrings[method]](url, params)
        .then(result => {
          resolve(result);
        })
        .catch(err => {
          console.error(`Error with request to ${url} - ${err}`);
          reject(err.response.status);
        });

然后我console.log等待请求的结果

问题出在 axios(and/or 浏览器)中。

基于此问题Cookies headers are present but Cookies are not stored in browser #1553您需要设置 withCredentials Axios 配置以在请求后在浏览器中存储 cookie:

  axios.post('domain.com', {
    name: 'name',
    password: 'password'
  }, {
    //AxiosRequestConfig parameter
    withCredentials: true //correct
  })