🍪

GoとNextでCookieを扱う🍪

2024/03/13に公開

要約

Next側からサーバー側にCokkieを送るには

withCredentials: true,

が必要

執筆背景

  1. ログイン成功時にGo側でユーザのIDをCookieを利用してset
  2. ログイン後にNext側からリクエストを送る
  3. Go側はsetしたユーザのIDをCookieから取得して後続の処理をする

という実装をしていました。しかし、Go側でCookieからユーザのIDが取得できず困っていました。

このようにsetして

c.SetCookie("uid", strconv.FormatUint(u.ID, 10), 3600, "/", "localhost", false, false)

このように取得していましたが取得できず...

uid, err := c.Cookie("uid") // 値が取得できない!

原因

クライアント側で withCredentials を許可していなかったことが原因のようです

import axios from 'axios';

export const instance = axios.create({
  baseURL: 'http://localhost:8080',
  headers: {
    'Content-Type': 'application/json',
  },
  timeout: 2000,
+ withCredentials: true,
})

withCredentialsとは

https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest/withCredentials

このフラグは、レスポンスにおいて Cookie を無視すること示すためにも使われます。既定値は false です。

つまり、デフォルトではCookieを送信していないようですね。これをtrueにしてあげることでサーバ側でもcookieを使用できるようになりました!🍪

Discussion