Drupal 8.5.1があり、匿名ユーザーに [〜#〜] cas [〜#〜] ログインページへのリダイレクトを強制しようとしています。最初にこの問題は以下のcheckAuthStatus
関数の起動に関連していると思いましたが、この問題は無限リダイレクトに関連しているようです:
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;
}
}
問題は何でしょうか?
最後に、質問に対して受け取ったコメントのおかげで問題を解決しました。これが私が見つけた解決策です:
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;
}
}
つまり、この問題は、パスチェックとRedirectResponse
オブジェクト管理に関連していました。