यदि कोई उपयोगकर्ता 403 त्रुटि का सामना करता है, तो मैं एक अनाम उपयोगकर्ता को लॉगिन फ़ॉर्म पर पुनर्निर्देशित करना चाहता हूं।
मैंने ईवेंट सब्सक्राइबर बनाया है और यह मेरा कोड है, लेकिन मैं वर्तमान पृष्ठ पर लूप पर समाप्त होता हूं।
/**
* Redirect anonymous user to login page if he encounters 404 or 403
* response.
*
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $response
* The created response object that will be returned.
* @param string $event
* The string representation of the event.
* @param \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher
* Event dispatcher that lazily loads listeners and subscribers from the dependency injection
* container.
*/
public function checkLoginNeeded(GetResponseEvent $response, $event, ContainerAwareEventDispatcher $event_dispatcher) {
$routeMatch = RouteMatch::createFromRequest($response->getRequest());
$route_name = $routeMatch->getRouteName();
$is_anonymous = \Drupal::currentUser()->isAnonymous();
$is_not_login = $route_name != 'user.login';
if ($is_anonymous && $route_name == 'system.403' && $is_not_login) {
$query = $response->getRequest()->query->all();
// $query['destination'] = $routeMatch->getRouteObject()->getPath();
$query['destination'] = \Drupal::url('<current>');
$login_uri = \Drupal::url('user.login', [], ['query' => $query]);
$returnResponse = new RedirectResponse($login_uri, Response::HTTP_FOUND);
$response->setResponse($returnResponse);
}
}
मुझे लगता है कि यह इस तथ्य से संबंधित है कि प्रतिक्रिया में पहले से ही गंतव्य (वर्तमान uri) और system.404 और system.403 शामिल हैं, कुछ उच्च प्राथमिकताएं हैं जो मुझे इसे ओवरराइड करने से रोकती हैं।