J'ai Drupal 8.5.1 et j'essaie de forcer une redirection pour les utilisateurs anonymes vers la page de connexion CAS . Je pensais que le problème était lié au déclenchement de la fonction checkAuthStatus
ci-dessous, cependant, le problème semble lié à une redirection sans fin :
namespace Drupal\my_custom_module\EventSubscriber;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Event subscriber subscribing to KernelEvents::REQUEST.
*/
class RedirectAnonymousSubscriber implements EventSubscriberInterface {
public function __construct() {
$this->account = \Drupal::currentUser();
}
public function checkAuthStatus(GetResponseEvent $event) {
\Drupal::logger('my_custom_module')->error('THIS IS A TEST');
if ($this->account->isAnonymous()
&& \Drupal::routeMatch()->getRouteName() != 'cas.legacy_login'
&& \Drupal::routeMatch()->getRouteName() != 'cas.service') {
$response = new RedirectResponse('/cas', 301);
$response->send();
}
}
public static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = ['checkAuthStatus', 27];
return $events;
}
}
Quel pourrait être le problème?
Enfin, j'ai résolu le problème grâce aux commentaires que j'ai reçus sur ma question. Voici la solution que j'ai trouvée:
namespace Drupal\my_custom_module\EventSubscriber;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Event subscriber subscribing to KernelEvents::REQUEST.
*/
class RedirectAnonymousSubscriber implements EventSubscriberInterface {
public function __construct() {
$this->account = \Drupal::currentUser();
}
public function checkAuthStatus(GetResponseEvent $event) {
if ($this->account->isAnonymous()
&& \Drupal::service('path.current')->getPath() != '/cas'
&& \Drupal::service('path.current')->getPath() != '/casservice') {
$response = new RedirectResponse('/cas', 301);
$event->setResponse($response);
}
return;
}
public static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = ['checkAuthStatus', 100];
return $events;
}
}
En bref, le problème était lié à la vérification du chemin et à la gestion des objets RedirectResponse
.