🍪
GoとNextでCookieを扱う🍪
要約
Next側からサーバー側にCokkieを送るには
withCredentials: true,
が必要
執筆背景
- ログイン成功時にGo側でユーザのIDをCookieを利用してset
- ログイン後にNext側からリクエストを送る
- 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とは
このフラグは、レスポンスにおいて Cookie を無視すること示すためにも使われます。既定値は false です。
つまり、デフォルトではCookieを送信していないようですね。これをtrueにしてあげることでサーバ側でもcookieを使用できるようになりました!🍪
Discussion