Railsを使っていてAJAXでPOSTしてもそのままではset-cookieされません。そのために、AJAXの処理でセッション情報を書き換えたり削除できなくなります。
Railsのcsrf-tokenをAJAXでのリクエストに付加することで、この問題を回避できます。
まずは、csrf-tokenを取得する必要があります。csrf-tokenはmetaタグでnameがcsrf-tokenのエレメントにです。次のコードでcsrf-tokenを取得します。
getCsrfToken() {
for (const elem of document.getElementsByTagName('meta')) {
if (elem.name === 'csrf-token') {
return elem.content;
}
}
}
あとは、AJAXのリクエストの時に取得したcsrf-tokenをヘッダーに付加します。superagentを使っている場合は、次のようなコードになります。
request.post("/login")
.set("X-CSRF-Token", getCsrfToken())
.send({id: loginId, password: password})
リクエストヘッダーにX-CSRF-Tokenを付加することで、レスポンスにset-cookieでセッション情報がセットされます。
セッションの破棄や書き換えなどもできます。
でわでわ