2023年 2月 の投稿一覧

Laravel でSession cookie が設定できない – .env のSESSION_DOMAIN設定を修正

皆さまこんにちは、ウチイダです。

先日、新規開発でLaravelの初期セットアップをしていた時につまづいた内容をメモします。

今回の開発は、LaravelをバックエンドのAPI サーバーとして、React で作られたSPAをフロントエンドに配置する構成でした。

Vite で起動したローカルのReactアプリケーション(localhost:5173) から、Laravelが動いているDockerコンテナ(localhost:80)に向けてリクエストをしたところ、警告が発生しました。

ResponseのSet-Cookie で警告が表示

レスポンス自体はちゃんと受け取れているようですが、Set-Cookieのところに警告アイコンが表示されています。

⚠️のアイコンにマウスオンしてみると、以下のようなメッセージが。

This attempt to Set-Cookie header was blocked because its domain attribute was invalid with regards to the current host url

現在のURLに対して、Set-Cookie のドメイン指定が不正なので、Cookieが保存できない、といった警告です。

レスポンスの内容をよく見ると、Set-Cookieのドメインプロパティが確かにおかしいです。

domain=.localhost

localhostの先頭に、. がついています。.env ファイルでSESSION_DOMAIN=.localhost と設定していることが原因でした。

以下のように修正したところ、解消しました。

# SESSION_DOMAIN=.localhost . がついているとNG
SESSION_DOMAIN=localhost

本番環境では、ReactとLaravelをサブドメインに分けて配置して運用する想定だったので、CORS対策としてドメインの先頭に.をつけていました。

Set-Cookie ヘッダーのdomain プロパティで、先頭に . をつけてドメイン指定すると、サブドメイン間でCookieを共有できるようになります。

この先頭の . を、ローカル用の .env からとり忘れていたのが原因でした。

localhost の指定では、.がついているとドメインを正しく認識できず、動かなくなってしまうのです。

ローカル用とサーバーにデプロイして使う.env の内容を分けて管理しておく必要がありますね。

以上です。あなたのお役に立てればうれしいです。

WSL2 が、wslg ユーザーでログインされたとき:慌てずに再起動すればOK

こんにちは、ウチイダです。

WSLのおかげでとても快適に開発ができるようになりましたが、たまにWSLならではのトラブルに見舞われることがあります。

今日も、心臓によくない事象が起こったので、メモしておきます。

突然、WSLのユーザーが変わってしまう

PCを起動してWSLを立ち上げたときに、いつもと少し違う画面が表示されました。

wslg というユーザーでログインしている

$ wslg [ ~ ] と、プロンプトの表示内容が違ううえ、いつものユーザー(y-uchiida)ではなく、wslg というユーザーでログインされています。

/etc/passwd をみると、y-uchiida のユーザーアカウントがありません。

ホームディレクトリも空っぽです。いろんなクライアントのコードとか入ってるのに…!

WSLの再起動

WSLのデータが消えてしまった!と、肝が冷えましたが、とりあえずWSLを再起動を試します。

PowerShellを起動して、以下を実行します。

wsl --shutdown

その後、ふたたびWindows TerminalからWSLに接続したところ、改善していました。

WSLの謎挙動ですね…

なにかあっても、まずは焦らず再起動。鉄則を再認識しました。

以上です。あなたのお役に立てればうれしいです。