ログイン情報を保持する仕組み
「このブラウザに認証情報を記憶」とかのチェックボックスをチェックしたりする仕組みです。
そうすることでブラウザを閉じたりPCを再起動しても次回にはログインしなくても引き続きブラウジングできます。
しかしながらこれが重宝されたのは、20年くらい前じゃないでしょうか。
それが未だにLaravelには残っているということですね。
一般的に認証状態はセッションクッキーで維持されますが、セッションクッキーは標準だと20分ほどで切れます。
なので、20分ほど無操作だと再度ログインを求められたりしますよね。
ですが、リメンバートークンは通常のクッキーに長時間(数日以上)の有効期限が設定されブラウザに保存されます。
なので、次の日くらいにPCを起動してもログイン状態が維持されます。
しかし今時ではセキュリティの問題であまりよろしくないと思います。
さすがにログアウトするとクリアされる
Laravel Breezeでusersテーブル以外を認証情報とする必要があったので、それを構築しました。
リメンバートークンのテストもしないといけないと思ったのでテストをしてみたのですが、意外にてこずりました。
元々私はこの機能を詳しく知らなかったので、AIに聞くと「ログアウトしても保持される」と仰るんですね。
あまりにうまくいかないので別のAIに聞くと「ログアウトすると保持しないよ」というので調べてみたらそのようでした。
正常な動きなのに、不正だと思い込みAIと2時間ほど格闘していました。
結局問題はありませんでした。
テストにChromeは大敵
Chromeにはブラウザ側で独自にセッションを保持する機能があります。
起動時にタブを復元する機能です。
この機能が有効になっているとリメンバートークンと同じ機能をブラウザが提供するのでテストになりません。
またこのChromeの機能が非常に便利なので「このブラウザに認証情報を記憶」チェックボックスをほぼオンにしたことがありませんでした。
なのでこの機能のことをあまり知っておらず、てっきりログイン画面で認証情報を自動入力してくれる機能と思い込んでいました。
EdgeもベースはChromeなのでテストになりません。
それでもChromeでテストするには
シークレットモードでテストすればよいと複数のAIにいわれたけど・・・。
シークレットモードではブラウザを閉じるとすべてのクッキーは削除されるのでダメです。
それをAIに突っ込むと「そのとおり!」と言われました、ほんとかわいい相棒です。
- F12キーを押しデバッグモードにしてクッキーをチェックします。
- まず、チェックボックスはオフのままでにしてログインします。
- セッションクッキーを削除します。
- リロードすると強制的にログアウトされます。
これが通常の正常動作です。 - チェックボックスをオンにしてログインします。
- リメンバートークン保存のクッキーが増えていることを確認します。
- セッションクッキーのみを削除します。
- リロードしてもログアウトされず、セッションクッキーが復元されます。
これがリメンバートークンの正常動作です。
今はブラウザでこの機能を提供してくれるので、WEB側でこの機能を提供するのはリスクが高い気がしますね。
ほんまにハマった・・・。
