web-dev-qa-db-ja.com

認証付きのノード作成から401/406エラーを取得する

サービスモジュールを有効にして、認証付きのノードを作成しようとしています。これまで私は次のことを行いました:

  • http://localhost/drupal/services/session/tokenからサービストークンを取得します。

  • ユーザー認証:ログインWebサービスをトリガーしましたが、代わりにセッション名、ID、完全なユーザー情報を取得しました。以前のWebサービスから取得したX-CSRF-Tokenを渡して、このWebサービスを呼び出しました。 ( http://localhost/drupal/myendpoint/user/login.json `)

  • ノードの作成:記事コンテンツタイプのノードを作成します。 JSONとCSRFトークンのフィールド値とセッション情報を次のように渡しています。 (http://localhost/drupal/myrest/node.create

    本文(application/x-www-form-urlencoded)

    {
       "title":"Created through service",
       "type":"article",
       "body": {
          "value": "<p>test</p>\n",
          "format": "filtered_html"
       }
    }
    

    ヘッダー

    • X-CSRF-Token:bla bla bla

    • `セッション名:bla bla bla

ノード作成Webサービスから受け取った応答は次のとおりです。

状態コード:406
日付:2015年12月4日金曜日23:43:31 GMT
X-Content-Type-Options:nosniff
サーバー:Apache/2.4.9(Win32)OpenSSL/1.0.1g PHP/5.5.12
X-Powered-By:PHP/5.5.12
Content-Type:text/html
Cache-Control:no-cache、must-revalidate、post-check = 0、pre-check = 0
接続:キープアライブ
キープアライブ:タイムアウト= 5、最大= 100
コンテンツの長さ:0
有効期限:日曜日、1978年11月19日05:00:00 GMT

ノード作成Webサービスのトリガー中に私が間違っていることを教えていただけませんか?

1
Ravi Maniyar

多くを掘り下げた後、私は自分で解決策を見つけました:

認証付きのノードを作成するための段階的なプロセスを投稿します。


Step 1: Get initial token.

    URL: `http://localhost/drupal/services/session/token`

    Method: GET

Step 2: Login

    URL: `http://localhost/drupal/myrest/user/login.json`

    Method: POST

    Content-Type: application/json

    Request payload - request parameter:

    X-CSRF-Token: <Token received from first web service response>

Step 3: Create node.

    URL: `http://localhost/drupal/myrest/node`

    Method: POST

    Content-Type: application/json

    Raw body:

    `{
          "title": "Sample post",
          "type": "article"
     }`

     Custom headers - request parameters:

     <session_name_value_received_from_previous_service_response>: <session_id_value_received_from_previous_service_response>

     Example: 

     SESS6a4470a2012aa23a7f83ea20ed1df766: KS43Muo_odeHA1KPI_kREWP6oK

     X-CSRF-Token: <token_value_received_from_previous_service_response>

     Example:

     X-CSRF-Token: JALApVoib7bGSFFh-59Saj9z5pT8q_5kP9BrHgGIO3E

そして私は成功した応答を得ています:

{"nid":"4","uri":"http://localhost/drupal/myrest/node/4"}

ありがとうございます。このような問題が発生した場合は、このスレッドを続けてください。お手伝いさせていただきます。

0
Ravi Maniyar

URLをhttp://localhost/drupal/myrest/nodeに、アプリケーションタイプをapplication/jsonに、リクエストメソッドをPOSTに変更します。その後、動作するはずです。