web-dev-qa-db-ja.com

RESTを使用してユーザーを削除する方法

REST APIを使用してユーザーアカウントを削除しようとしています。

これが私のコードです:

// .xml asks for xml data in response.
$service_url = 'http://www.example.com/rest/user/login';

$post_data = [
  'username' => 'test',
  'password' => 'pass',
];

// Format post data as application/x-www-form-urlencoded.
$post_data = http_build_query($post_data, '', '&');

// Set up the request.
$curl = curl_init($service_url);

// Have curl_exec return a string.
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
// Do a POST.
curl_setopt($curl, CURLOPT_POST, TRUE);
// POST this data.
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
// Output to command line
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);

// Make the request.
$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

$xml = new SimpleXMLElement($response);
$session_cookie = $xml->session_name . '=' . $xml->sessid;

// Get token.
$curl_get = curl_init();
curl_setopt_array($curl_get, [
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_URL            => 'http://www.example.com/services/session/token',
]);
$csrf_token = curl_exec($curl_get);
curl_close($curl_get);

// A user ID.
$id = 1500;
// The token.
$token = $csrf_token;

// Set up the curl resource
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/rest/user/$id?access_token=$token");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");

$response = curl_exec($ch);

// Close curl resource to free up system resources.
curl_close($ch);

それは返します:

匿名ユーザーのアクセスが拒否されました

ユーザーを削除するコードをどのように記述する必要がありますか?

2
user35721

最初にログインする必要があります:

$loginData = ['username' => 'yourusername', 'password' => 'yourpassword'];

$ch = curl_init("http://pathtodrupal.com/endpoint/user/login.json");

curl_setopt_array($ch, [
  CURL_OPT              => TRUE,
  CURLOPTRETURNTRANSFER => TRUE,
  CURLOPT_HTTPHEADER    => ['Content-Type: application/json'],
  CURLOPT_POSTFIELDS    => json_encode($loginData),
]);

$response = curl_exec($ch);

$responseData = json_decode($response, TRUE);

POSTログイン要求を送信すると、次の応答が返されます。

{u'session_name ':u'SESScxx45656f30'、u'sessid ':u'mOE9NdG6Bk3EADSvKJHGGy8jgkQ'、u'token ':u'-HVkXhARIynpmJxow5NUIYTRXSc'、u'user ':{u'status':u '画像 ':u'0'、u'uuid ':u'514c987e7-15f0-43cc-9c6f-53279c216f30'、u'uid ':u'1'、u'language ':u' '、u'created': u'1310006971 '、u'init':u'morinfo @ dbasepu.com '、u'timezone':u'America/New_York '、u'access':u'1429109927 '、u'theme':u ''、 u'roles ':{u'2':u'authenticated user '}、u'signature':u ''、u'signature_format ':u'1'、u'mail ':u'[email protected]' 、u'login ':1429111638、u'data':{u'ckeditor_width ':u'100%'、u'form_build_id ':u'form-60703ffc3'; lk6c0fe03cebe9 '、u'ckeditor_lang':u'en '、 u'ckeditor_show_toggle ':u't'、u'last_category_id ':1、u'ckeditor_auto_lang':u't '、u'ckeditor_default':u't '、u'site_access':{u'1 ':u' 1 '}、u'last_site_id':1}、u'name ':u'bewmrn'}}

以降のリクエストでは、ヘッダーのセットをX-CSRF-Tokenに$response['token']に、Cookieに$response['session_name'].=.$response['sessid']を設定します。これはうまくいくはずです。

1
user3277225