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