프로그래밍 방식으로 사용자를 기본 "액세스 제한"으로 리디렉션


12

프로그래밍 방식으로 사용자를 기본 "액세스 제한"페이지로 리디렉션하고 싶습니다. 간단한 리디렉션을 위해 "RedirectResponse"개체가 필요하다는 것을 알고 있지만 여기서 기본 "액세스 제한"페이지를 어떻게 지정합니까?


1
일반적으로 "액세스 제한"페이지는 다른 페이지로 리디렉션되지 않고 403 상태 코드를 반환하여 생성됩니다. 당신은 같은 것을 시도 했습니까return new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

답변:


24

코드의 어느 시점에서나 예외를 던질 수 있습니다.

403 :

throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();

404 :

throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();

그런 다음 DefaultExceptionHtmlSubscriber에 의해 예외가 포착되고 하위 요청 이 반환 /system/403되거나 /system/404일반 "액세스 거부"또는 "찾을 수 없음"페이지를 표시하지 않으려는 경우 기본 사이트 설정에서 구성 할 수 있습니다.

다른 옵션은 코드가있는 위치에 따라 다릅니다.

  • 컨트롤러 또는 폼에서 403 또는 404 응답을 반환

  • 이벤트 가입자 인 경우 이벤트에 응답을 설정하십시오.

하지 말아야 할 것은 직접 응답을 보내는 것입니다. 이것은 코드를 멈추지 않으며 두 개의 응답을 생성합니다. 하나는 전송 한 것과 하나는 Drupal 커널에 의해 반환됩니다. 예기치 않은 동작이 발생합니다.


2

이것은 올바른 방법으로 보입니다.

    $response = new RedirectResponse('/system/403');
    $event->setResponse($response);

2

시스템의 액세스 거부 경로에서 리디렉션을 작성하십시오.

$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());

Drupal 표준 액세스 거부 페이지로 이동합니다. 경로는 system.routing.yml코어에 정의되어 있습니다.

가장 좋은 답변은 깨진 브라우저 기반의 액세스 거부를 제공하는 것입니다. Drupal UI를 표시하려면 위를 사용하십시오.


0

페이지에서 다음을 사용할 수 있습니다.

return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));

: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8

또는 from from 제출 :

$form_state->setRedirect('your.module.route.name');

그런 다음 'your.module.route.name'의 액세스 권한을 구성하십시오.

액세스 권한을 구성하는 방법을 모르는 경우 다음을 확인하십시오. http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


$ response = new Response ( '', Response :: HTTP_FORBIDDEN);을 시도했습니다. $ event-> setResponse ($ 응답); 이것은 사용자에게 하얀 페이지 만 보여줍니다. 정보가 너무 적습니다. Drupal의 기본 "액세스 거부"페이지를 표시하고 싶습니다.
jepster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.