RESTで403エラーを取得する


7

RESTを試してみます。drupal-8.0.0-beta12をVMにインストールしました。cURLを使用しても問題curl http://testing.dev/drupal8/node/1?_format=jsonなく動作し403ますが、開発HTTPクライアントを使用してエラーメッセージが表示される理由がわかりません。

ここに画像の説明を入力してください

何か案は?


実際にjsonを必要とするルートを提供しましたか?このよう
alexej_d 2015

開発URLクライアントが機能しないのにcURLが機能するのはなぜですか?この解決策も文書化されていないようです。

回答:


2

匿名ユーザーがリソースにアクセスするための正しい権限を持っていますか?

testing.dev/drupal8/admin/people/permissions RESTFul Webサービスの下で、Access GET on Content resource匿名ユーザーがチェックされていることを確認します。キャッシュをクリアして、リクエストを再試行してください。

また、rest.settings.ymlファイル内でそのリソースに対して公開されている形式タイプがない場合もあります。このファイルは、supported_formatsとauthを設定します。あなたの場合は次のようになります:

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

Drupal 8.2.3のadmin / people / permissionsページでは、RESTfulの下に「コンテンツリソースに対するアクセスGET」がありません。ところで、私はRestUIと他のモジュールを有効にしました。&RESTリソースのコンテンツを有効にします。
bluesky_still 16

これはdrupal> 8.2.3でどのように機能しますか?匿名ユーザーに対してGETへのアクセスを有効にする方法が見つからないようです。
2017

2

@dibsと@bluesky_stillこれが元のポスターではないにしても、皆さんのお役に立てれば幸いです。

REST UIは、8.2.3には向かないと思います。

GETリクエストとPOSTリクエストを機能させるために私がしたことは次のとおりです。

REST構成のセットアップ

REST設定を変更しようとしているエンティティタイプのymlを編集する必要があります。たとえば、ノードエンティティはrest.resource.entity.node.ymlを使用します。RESTUIは、8.2以降では本当に役に立たないという印象を受けたので、手動で行う必要があります。このファイルをお好みに合わせて作成したら、サイトにインポートする必要があります。

これを「正しく」行う方法はまだわかりません。構成インポーター(UUIDエラーをスローします)を使用する必要があるのか​​、それをテーマに含めるか、デフォルトの設定に含める必要があるのか​​はわかりません。私がやった仕事に設定を取得します。結局、機能モジュールを使用してRESTリソース構成用の機能パッケージ(admin / config / development / features / edit)を作成し、機能をダウンロードしてパッケージを解凍し、変更によって作成されたモジュールをインストールしました。

次に、作成したモジュールのディレクトリ(DRUPAL_ROOT / modules / MODULE_NAME / config / install / rest.resource.entity.node.yml)にある構成ファイルを手動で編集して、必要な設定にしました。最後に、機能の構成ページ(admin / config / development / features /)から機能を更新して変更を実装しました。作成したモジュールの横にある「変更」をクリックし、変更の横にあるチェックボックスをクリックして、「インポート」をクリックします。変更」)。

インポートを処理するためのより簡単な方法があるはずですが、8.2.3で動作します。

ユーザー権限

REST設定がセットアップされると、エンティティタイプは/ admin / people / permissions /で設定した権限に従う必要があります。したがって、匿名ユーザーが公開されたノードを表示できる場合は、公開されたノードを取得することもできます(少なくとも、ドキュメントによると)。

それでも問題が解決しない場合は、必ずリクエストのヘッダーにcsdrTokenを含める必要があります。

csrfToken

エンドポイントYOUR_SITE.DOMAIN / rest / session / tokenへのGETリクエストは、GETまたはPOSTリクエストのX-CSRF-Token 'ヘッダーとして設定できるトークンを提供します。jQueryを使用して最初のエントリを取得する一般的な簡単な例は、次のようになります。

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);
        }
      });
  });
}

他のすべてが失敗した場合

ビューモジュールを使用してGETエンドポイントを設定することにも成功しました。この記事はプロセスを説明するかなり良い仕事をします:http : //redcrackle.com/blog/rest-export-views-drupal-8。POSTリクエストでは機能しませんが、役立つはずです。

これがお役に立てば幸いです。これは、単純な要求であるべきことについては本当に厄介な問題であり、ドキュメントはこれをアクセス可能にする優れた機能を果たしていません。幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.