feat: user-friendly error messages on login

This commit is contained in:
Björn Fromme
2026-01-23 10:30:17 +01:00
parent 8dec0be375
commit c41524c1fd
+18 -3
View File
@@ -6,6 +6,8 @@ namespace App\Security;
use App\BusProNet\ApiClient; use App\BusProNet\ApiClient;
use App\BusProNet\Exception\ApiClientException; use App\BusProNet\Exception\ApiClientException;
use App\BusProNet\Exception\ImmediateConnectionCloseException;
use App\BusProNet\Exception\TimeoutException;
use App\BusProNet\Model\PersonalData; use App\BusProNet\Model\PersonalData;
use App\Entity\User; use App\Entity\User;
use App\Htmx\HxRedirectResponse; use App\Htmx\HxRedirectResponse;
@@ -63,11 +65,13 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
try { try {
$response = $this->apiClient->getPersonalData($email, $password); $response = $this->apiClient->getPersonalData($email, $password);
} catch (ApiClientException $e) { } catch (ApiClientException $e) {
throw new CustomUserMessageAuthenticationException($e->getMessage()); $message = $this->isConnectionError($e) ?
'Der Server ist momentan nicht erreichbar. Bitte versuche es später erneut.' : $e->getMessage();
throw new CustomUserMessageAuthenticationException($message);
} }
if (false === $response instanceof PersonalData) { if (false === $response instanceof PersonalData) {
throw new CustomUserMessageAuthenticationException('Der Login ist fehlgeschlagen :('); throw new CustomUserMessageAuthenticationException('Benutzername oder Passwort ist nicht korrekt.');
} }
$csrfToken = $request->request->getString('_csrf_token'); $csrfToken = $request->request->getString('_csrf_token');
@@ -87,7 +91,9 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
try { try {
$crmAttributes = $this->apiClient->getCrmAttributes($email, $password); $crmAttributes = $this->apiClient->getCrmAttributes($email, $password);
} catch (ApiClientException $e) { } catch (ApiClientException $e) {
throw new CustomUserMessageAuthenticationException($e->getMessage()); $message = $this->isConnectionError($e) ?
'Der Server ist momentan nicht erreichbar. Bitte versuche es später erneut. :(' : $e->getMessage();
throw new CustomUserMessageAuthenticationException($message);
} }
$roles = $crmAttributes->roles; $roles = $crmAttributes->roles;
@@ -134,4 +140,13 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
return new RedirectResponse($targetPath); return new RedirectResponse($targetPath);
} }
private function isConnectionError(ApiClientException $e): bool
{
if ($e instanceof TimeoutException || $e instanceof ImmediateConnectionCloseException) {
return true;
}
return 'Unable to open socket' === $e->getMessage();
}
} }