diff --git a/assets/vue/composables/auth/login.js b/assets/vue/composables/auth/login.js index 9ddb6e5951..76f624576a 100644 --- a/assets/vue/composables/auth/login.js +++ b/assets/vue/composables/auth/login.js @@ -3,6 +3,7 @@ import { useRoute, useRouter } from "vue-router" import { useSecurityStore } from "../../store/securityStore" import { ref } from "vue" import securityService from "../../services/securityService" +import { useNotification } from "../notification" function isValidHttpUrl(string) { let url @@ -21,6 +22,7 @@ export function useLogin() { const router = useRouter() const securityStore = useSecurityStore() const platformConfigurationStore = usePlatformConfig() + const { showSuccessNotification, showErrorNotification } = useNotification() const isLoading = ref(false) @@ -54,6 +56,9 @@ export function useLogin() { } else { await router.replace({ name: "Home" }) } + } catch (error) { + const errorMessage = error.response?.data?.error || "An error occurred during login." + showErrorNotification(errorMessage) } finally { isLoading.value = false } diff --git a/src/CoreBundle/Controller/SecurityController.php b/src/CoreBundle/Controller/SecurityController.php index 8067dc8920..df382726a5 100644 --- a/src/CoreBundle/Controller/SecurityController.php +++ b/src/CoreBundle/Controller/SecurityController.php @@ -62,6 +62,15 @@ class SecurityController extends AbstractController return $this->json(['error' => $message], 401); } + if (null !== $user->getExpirationDate() && $user->getExpirationDate() <= new \DateTime()) { + $message = $translator->trans('Your account has expired.'); + + $tokenStorage->setToken(null); + $request->getSession()->invalidate(); + + return $this->json(['error' => $message], 401); + } + $extraFieldValuesRepository = $this->entityManager->getRepository(ExtraFieldValues::class); $legalTermsRepo = $this->entityManager->getRepository(Legal::class); if ($user->hasRole('ROLE_STUDENT')