Gặp lỗi 403 trong REST


7

Vì vậy, tôi đang thử REST. Đã cài đặt drupal-8.0.0-beta12 trong VM. cURL hoạt động tốt khi sử dụng curl http://testing.dev/drupal8/node/1?_format=jsonnhưng tôi không chắc tại sao tôi lại nhận được 403thông báo lỗi khi sử dụng dev HTTP client:

nhập mô tả hình ảnh ở đây

Có ý kiến ​​gì không?


Bạn đã thực sự cung cấp một tuyến đường với json theo yêu cầu? Giống như ở đây
alexej_d

Tại sao cURL hoạt động trong khi dev http client không? Giải pháp này dường như không được ghi nhận là tốt.

Câu trả lời:


2

Bạn đã có quyền chính xác cho người dùng ẩn danh truy cập tài nguyên chưa?

testing.dev/drupal8/admin/people/permissions trong Dịch vụ web RESTFul đảm bảo Access GET on Content resourceđược đánh dấu cho Người dùng ẩn danh. Xóa bộ nhớ cache và thử lại yêu cầu của bạn.

Ngoài ra, bạn có thể không có loại định dạng được hiển thị cho tài nguyên đó trong rest.settings.ymltệp của mình . Tập tin này đặt hỗ trợ_formats và auth. Đây là những gì sẽ trông giống như trong trường hợp của bạn:

resources:
  'entity:node':
    GET:
      supported_formats:
        - hal_json
        - json
      supported_auth:
        - cookie

Drupal 8.2.3, trong trang quản trị / người / quyền, không có "Truy cập GET trên tài nguyên nội dung" trong RESTful. BTW, tôi đã kích hoạt RestUI & các mô-đun khác. & kích hoạt Nội dung trong tài nguyên REST.
bluesky_still

Làm thế nào để nó hoạt động trong drupal> 8.2.3? Tôi dường như không thể tìm thấy cách kích hoạt quyền truy cập GET cho người dùng ẩn danh.
dibs

2

@dibs và @bluesky_still Tôi hy vọng điều này sẽ giúp các bạn, nếu không phải là poster gốc:

Tôi nghĩ REST UI chỉ là không có trong 8.2.3.

Đây là những gì tôi đã làm để có được một số yêu cầu GET và POST hoạt động:

Thiết lập cấu hình REST

Bạn cần chỉnh sửa yml cho loại thực thể bạn đang cố gắng thay đổi cấu hình REST cho. Ví dụ, thực thể nút sẽ sử dụng rest.resource.entity.node.yml. Tôi đã có ấn tượng rằng RESTUI thực sự không hữu ích với 8.2+, vì vậy bạn phải làm điều đó bằng tay. Khi bạn đã tạo tệp này theo ý thích của mình, bạn cần nhập tệp đó vào trang web của mình.

Tôi vẫn không thể tìm ra cách để làm điều này "chính xác"; Tôi không biết nếu bạn cần sử dụng trình nhập cấu hình (sẽ gây ra lỗi UUID) hoặc đưa nó vào một chủ đề hoặc trong cài đặt mặc định của bạn hoặc những gì. Tôi đã có được cấu hình để làm việc. Tôi đã kết thúc việc sử dụng Mô-đun tính năng để tạo gói tính năng cho Cấu hình tài nguyên REST (quản trị / cấu hình / phát triển / tính năng / chỉnh sửa), tải xuống tính năng, giải nén gói và cài đặt mô-đun được tạo bởi các thay đổi.

Sau đó, tôi đã chỉnh sửa thủ công các tệp cấu hình trong thư mục của mô-đun đã tạo (DRUPAL_ROOT / mô-đun / MODULE_NAME / config / install / rest.resource.entity.node.yml) để có các cài đặt tôi muốn. Cuối cùng, tôi đã thực hiện các thay đổi bằng cách cập nhật tính năng từ trang cấu hình tính năng (admin / config / Development / features / nhấp vào "đã thay đổi" bên cạnh mô-đun bạn đã tạo, nhấp vào hộp kiểm bên cạnh các thay đổi và nhấp vào "Nhập" Thay đổi ").

Có một cách đơn giản hơn để xử lý việc nhập, nhưng nó hoạt động với tôi vào ngày 8.2.3.

Quyền Người dùng

Khi cấu hình REST của bạn được thiết lập, các loại thực thể sẽ tuân theo các quyền bạn đã đặt trong / admin / people / allow /. Vì vậy, nếu người dùng ẩn danh có thể xem các nút được xuất bản, họ cũng có thể NHẬN các nút được xuất bản, v.v. (Ít nhất, theo tài liệu .)

Nếu bạn vẫn gặp sự cố, bạn cần đảm bảo đưa csdrToken vào tiêu đề yêu cầu của bạn.

Các csrfToken

Yêu cầu GET đến điểm cuối YOU_SITE.DOMAIN / rest / session / token sẽ cung cấp cho bạn mã thông báo mà bạn có thể đặt làm tiêu đề X-CSRF-Token 'trên yêu cầu GET hoặc POST của bạn. Một ví dụ điển hình và đơn giản sử dụng jQuery để NHẬN mục nhập đầu tiên có thể trông như thế này:

function getFirstNode() {
  jQuery
    .get('YOURSITE/rest/session/token')
    .done(function (data) {
      var csrfToken = data;
      jQuery.ajax({
        url: 'YOURSITE/web/node/1?_format=hal_json',
        method: 'GET',
        headers: {
          'Content-Type': 'application/hal+json',
          'X-CSRF-Token': csrfToken,
        },
        success: function (node) {
          console.log(node);
        }
      });
  });
}

Nếu vẫn thất bại

Tôi cũng đã thiết lập thành công các điểm cuối GET bằng Mô-đun Lượt xem. Bài viết này thực hiện một công việc khá tốt để giải thích quy trình: http://redcrackle.com/blog/rest-export-view-drupal-8 . Nó sẽ không hoạt động cho các yêu cầu POST, nhưng nó sẽ giúp.

Tôi hi vọng cái này giúp được. Đó là một vấn đề thực sự khó khăn đối với những gì nên là một yêu cầu đơn giản và tài liệu KHÔNG làm tốt công việc này có thể truy cập được. Chúc may mắn!

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.