Я работаю с BShaffer OAuth2 / CakePHP 3.6 и большую часть пути туда. Однако я столкнулся с небольшим камнем преткновения в коде и сейчас пытаюсь перевести команду PHP Curl в команду Cake friendly httpClient
Командой curl является
curl -u testclient:testpass http://localhost/token.php -d 'grant_type=client_credentials'
в то время как моя текущая попытка для кода
$http = new Client();
$auth = [
'_csrfToken' => $this->request->getParam('_csrfToken'),
'grant_type' => 'client_credentials',
'username' => $result->UserID,
'password' => $createCode
];
$response = $http->post('/oauth/request', $auth);
У меня такое чувство, что мне нужно поместить имя пользователя / пароль в заголовок аутентификации для OAuth2, но я не уверен на 100%, как это сделать. Документация для httpClient включает OAuth2, но в виде одного заголовка:
$http = new Client([
'headers' => ['Authorization' => 'Bearer ' . $accessToken]
]);
$response = $http->get('https://example.com/api/profile/1');
EDIT:
С примерами из комментариев я получил, что PHP CURL работает напрямую, однако клиент Cake все еще дает пустой результат. Вот что у меня на данный момент:
$data = $this->request->getData();
$result = $this->Users->RegisterNewUser($data);
$report = $data['email'];
if ($result->result == 1)
{
$generatePrivateKey = $this->OAuth->generatePrivateKey($result->UserID);
$query = [
'client_id' => $result->UserID,
'client_secret' => $generatePrivateKey,
'redirect_uri' => ''
];
$this->OAuth->insertClientData($query);
// Insert User into clients //
$auth = [
'grant_type' => 'client_credentials'
];
// Is not working //
$http = new Client();
$response = $http->post('https://example.com/oauth/request', $auth, [
'auth' => ['username' => $result->UserID, 'password' =>
$generatePrivateKey]
]);
print_r($response->getBody());
// Works //
$ch = curl_init('https://example.com/oauth/request');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $auth);
curl_setopt($ch, CURLOPT_USERPWD, $result->UserID . ":". $generatePrivateKey);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
}