it-swarm.com.de

Endlose Weiterleitung von EventSubscriber

Ich habe Drupal 8.5.1 und ich versuche, eine Weiterleitung für anonyme Benutzer auf die Anmeldeseite CAS zu erzwingen Ich dachte, dass das Problem mit dem Auslösen der Funktion checkAuthStatus unten zusammenhängt, aber das Problem scheint mit einer endlosen Umleitung verbunden zu sein:

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;
  }

}

Was könnte das Problem sein?

3
MmMnMr

Schließlich habe ich das Problem dank der Kommentare, die ich zu meiner Frage erhalten habe, gelöst. Hier ist die Lösung, die ich gefunden habe:

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;
  }

}

Kurz gesagt, das Problem hing mit der Pfadprüfung und der Objektverwaltung RedirectResponse zusammen.

3
MmMnMr