【问题标题】:Cookie not setting in Scala PlayCookie 未在 Scala Play 中设置
【发布时间】:2020-06-01 20:07:10
【问题描述】:

我试图在使用 scala 播放框架时从响应中设置一个 cookie。我正在创建一个名为 session 的 cookie,其值为 UUID(我知道 play 带有它自己的会话管理)。 我可以看到响应标头包含设置 cookie 指令,但未设置 cookie。

以下是设置 cookie 的控制器中的操作中的 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 标头。它们都在其开发人员工具中各自的响应 cookie 查看器中显示了看似正确格式的 cookie。

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

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

react 前端的 URL 是

http://localhost:49161/login/hydrate

并且正在播放的端点是

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

我也尝试在 cookie 上设置 /login/hydrate/ 的路径

前端的反应代码

     // 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 等待请求的结果

【问题讨论】:

  • 从 JS 看不到仅 HTTP 的 cookie
  • @cchantep 是的,我想通了,但是当只有来自其他网站的 http cookie 时,它​​仍然没有出现在浏览器的 cookie 查看器中。另外,正如我所说,我尝试将我的 cookie 生成为仅 http 和非 http - 并且它们都不起作用

标签: reactjs scala cookies playframework axios


【解决方案1】:

问题出在 axios(和/或浏览器)中。

基于这个问题Cookies headers are present but Cookies are not stored in browser #1553你需要设置withCredentials Axios config来在请求后在浏览器中存储cookie:

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

【讨论】:

  • 我已经进行了更改,现在可以完美运行,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2020-12-31
  • 2012-09-27
相关资源
最近更新 更多