Lập trình chuyển hướng người dùng đến quyền truy cập mặc định đã bị hạn chế


12

Tôi muốn chuyển hướng người dùng của mình đến trang "hạn chế truy cập" mặc định. Tôi biết rằng tôi cần một đối tượng "RedirectResponse" cho một chuyển hướng đơn giản, nhưng làm cách nào để chỉ định trang "hạn chế truy cập" mặc định ở đây?


1
Thông thường, một trang "bị hạn chế truy cập" được tạo ra bằng cách trả về mã trạng thái 403, không chuyển hướng đến một trang khác. Bạn đã thử một cái gì đó nhưreturn new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle

Câu trả lời:


24

Bạn có thể ném một ngoại lệ tại bất kỳ điểm nào trong mã của bạn:

403:

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

404:

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

Sau đó, ngoại lệ được bắt gặp bởi DefaultExceptionHtmlSubscacker và một yêu cầu con cho /system/403hoặc /system/404được trả lại, bạn có thể định cấu hình trong cài đặt trang cơ bản nếu bạn không muốn hiển thị trang "truy cập bị từ chối" hoặc "không tìm thấy" chung chung.

Các tùy chọn khác phụ thuộc vào vị trí đặt mã:

  • Trả về phản hồi 403 hoặc 404 từ bộ điều khiển hoặc biểu mẫu

  • Đặt phản hồi trong một sự kiện nếu bạn đang ở trong một thuê bao sự kiện.

Điều bạn không bao giờ nên làm là gửi phản hồi trực tiếp. Điều này không dừng mã và tạo ra hai phản hồi, một phản hồi bạn đã gửi và một trả về bởi nhân Drupal. Điều này sẽ dẫn đến hành vi không thể đoán trước.


2

Đây có vẻ là cách đúng đắn:

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

2

Xây dựng chuyển hướng của bạn từ tuyến truy cập bị từ chối của hệ thống.

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

Điều này sẽ đưa bạn đến trang bị từ chối truy cập tiêu chuẩn Drupal. Các tuyến đường được xác định system.routing.ymltrong lõi.

Câu trả lời hàng đầu sẽ cung cấp cho bạn một trình duyệt tìm kiếm bị từ chối dựa trên Access Denied, đây có thể là những gì bạn đang tìm kiếm. Nếu bạn muốn giao diện người dùng Drupal của bạn hiển thị, hãy sử dụng ở trên.


0

Từ một trang, bạn có thể sử dụng:

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

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

Hoặc từ một từ trình:

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

Sau đó định cấu hình quyền truy cập của 'your.module.route.name'

Nếu bạn không biết cách định cấu hình quyền truy cập, hãy kiểm tra: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom- allow-dalal-8


Tôi đã thử $ answer = Phản hồi mới ('', Phản hồi :: HTTP_FORBIDDEN); $ event-> setResponse ($ hồi đáp); Điều này chỉ hiển thị một trang trắng cho người dùng. Đó là quá ít thông tin. Tôi muốn hiển thị trang "truy cập bị từ chối" mặc định từ Drupal.
jepster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.