サービスモジュールを有効にして、認証付きのノードを作成しようとしています。これまで私は次のことを行いました:
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
)
{
"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サービスのトリガー中に私が間違っていることを教えていただけませんか?
多くを掘り下げた後、私は自分で解決策を見つけました:
認証付きのノードを作成するための段階的なプロセスを投稿します。
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"}
ありがとうございます。このような問題が発生した場合は、このスレッドを続けてください。お手伝いさせていただきます。
URLをhttp://localhost/drupal/myrest/node
に、アプリケーションタイプをapplication/jsonに、リクエストメソッドをPOSTに変更します。その後、動作するはずです。