いや、マジで悩みました。Codeがおかしいのかと延々悩んで。
でも、Api Gatewayの設定でした。Set-Cookieを設定しなければならない。以下の図をみてください。メソッドレスポンスのレスポンスヘッダーに以下の2つを設定。
![](https://i0.wp.com/mike2mike.xyz/wp-content/uploads/2023/11/スクリーンショット-2023-11-01-162911.png?resize=996%2C805&ssl=1)
次に統合レスポンスにヘッダーのマッピングとマッピングテンプレートを。
method.response.header.Access-Control-Allow-Origin '*'
method.response.header.Set-Cookie integration.response.body.headers.Set-Cookie
#set($inputRoot = $input.path('$.body'))
$inputRoot
![](https://i0.wp.com/mike2mike.xyz/wp-content/uploads/2023/11/スクリーンショット-2023-11-01-162937.png?resize=1008%2C727&ssl=1)
![](https://i0.wp.com/mike2mike.xyz/wp-content/uploads/2023/11/スクリーンショット-2023-11-01-163007.png?resize=999%2C510&ssl=1)
これで、Cookieがブラウザに格納されるはずです。もちろん、レスポンスCodeをLambda関数書かないといけないですが。
さて、Cookieのキーが同じ値ならば、という条件を付けたいのですが、デフォルトだとLambda関数のeventが空なのでうまくいかなかったです。
その場合ヘッダーを付けましょう。
![](https://i0.wp.com/mike2mike.xyz/wp-content/uploads/2023/11/スクリーンショット-2023-11-01-163059-1.png?resize=1024%2C774&ssl=1)
統合リクエストのマッピングテンプレートに、
#set($cookieHeader = $input.params().header.get('Cookie'))
{
"cookies": "$cookieHeader"
}
といれます。これサンプルなので、後で修正する羽目になりました。実際に使用するときはAIチャットに相談してください。
あと、気をつけるのは、統合リクエストに権限付けるの忘れないように。あれ、新コンソールだと見当たらないな? 旧コンソールだとあるのに。
追記です
私はAPI-Gatewayとlambda関数は1対1で繋がっていると思っていて、クッキーがAPI-Gatewayのドメインごとに分かれてしまう現象に悩んでました。
lambda別々に作って、クッキー設置したり、取り出したりしますよね。これができないのは困る。
ヘッダーが悪いのか、コードが悪いのか、色々悩んでカスタムドメインをやろうとしてふと気づきました。
「リソース」使えばいいじゃね?
![](https://i0.wp.com/mike2mike.xyz/wp-content/uploads/2023/11/スクリーンショット-2023-11-16-100530.png?resize=716%2C501&ssl=1)
こうすれば、各リソースにlambda関数結びつけて、同じドメインで扱えます。
ちょっと備忘録でした。
コメント