私は、いくつかのガード認証者によって保護されたSymfonyアプリケーションを持っています。そのうちの2つは、この質問に関係します。ユーザーのx509証明書を確認する認証者が1人あり、失敗した場合は従来のログインフォームが表示されます。Symfonyガードは認証失敗から復旧します
私はSonata/FOSユーザーバンドルも使用しています。そのバンドルは、ユーザーがcredentials_expire_at
プロパティを持っているかどうかをチェックし、credentials_expire_at <= now()
の場合はCredentialsExpiredExceptionをスローします。
問題は、すべての認証者のチェックが行われますが、証明書にはユーザのcredentials_expire_at
プロパティに関連しない独自の有効期限があります。
次のような状況があります。ユーザーがサイトにアクセスし、有効な証明書を提供しています。ユーザーのアカウントに過去にcredentials_expire_at
が設定されているため、CredentialsExpiredExceptionがスローされます。
これが発生すると、GuardのメソッドonAuthenticationFailure()
が呼び出され、例外とユーザーにアクセスできます。ですから、その時点で私はユーザーを知っていますし、認証が(不正に)失敗した理由を知っています。
私の質問はです。この状況からどのように復旧できますか? スローされた例外にかかわらずsymfonyがユーザを認証します。