J'essaie de créer un adaptateur Auth personnalisé pour une API héritée. Appelons l'adaptateur TR42
. En ce moment, je suis débogage TR42::check()
donc je suis en utilisant des valeurs codées en dur:Comment soumettre POST pour cURL dans Lithium
<?php
class TR42 extends \lithium\core\Object {
public function __construct(array $config = []) {
$defaults = [
'scheme' => 'http',
'host' => 'localhost/tr42/mock_api_authenticate.php',
'action' => 'authLookup',
'fields' => ['username', 'password'],
'method' => 'POST'
];
parent::__construct($config + $defaults);
}
public function check($credentials, array $options = []) {
$postConfig = [
/**
* Should I be using 'body' or 'query' to submit POST fields?
*/
'body' => [
'username' => 'housni',
'password' => sha1('legacyHashedPassword'),
'action' => 'authLookup'
],
'query' => 'username=housni&password=' . sha1('legacyHashedPassword') . '&action=authLookup',
];
$request = new Request($postConfig + $this->_config);
$stream = new Curl($this->_config);
$stream->open();
$stream->write($request);
$response = $stream->read();
$stream->close();
echo '<pre>' . print_r($response, true) . '</pre>';
die();
}
}
?>
Le fichier http://localhost/tr42/mock_api_authenticate.php
ressemble à ceci:
<?php
echo '<h1>This request is: ' . $_SERVER['REQUEST_METHOD'] . '</h1>';
if (!empty($_POST)) {
echo '<h1>YAY</h1>';
} else {
echo '<h1>NAY</h1>';
}
echo '<pre>' . print_r($_POST, true) . '</pre>';
?>
Depuis mon code cURL soumet une requête POST, je pense mon _POST $ à être placés dans mock_api_authenticate.php
mais qui ne se produit pas parce que la sortie de Tr42 :: check() de print_r() est:
HTTP/1.1 200 OK
Date: Sun, 18 Aug 2013 04:46:34 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.4.17-1~lucid+1
Vary: Accept-Encoding
Content-Length: 63
Connection: close
Content-Type: text/html
This request is: POST
NAY
Array
(
)
Il veut tout dire req uest est POST mais le tableau POST (le dernier tableau vide) est vide.
Qu'est-ce que je fais mal?
Merci pour la lecture :)
Je ne suis pas sûr Je comprends comment ils vont tous ensemble. Pouvez-vous élaborer plus, s'il vous plaît? Êtes-vous en train de dire que TR42 devrait résider dans 'extensions \ adapter \ security \ auth \ TR42' et que les connexions pour' api' de 'type' =' Http' et 'adapter' =' TR42' devraient implémenter cette vérification? Je suppose que ce qui me dégoûte est la façon dont la connexion a une méthode 'post()' qui semble provenir de 'Service'. Je suis encore assez nouveau pour certaines parties de Lithium :) – Housni
En outre, cet adaptateur TR42 est seulement une API d'authentification, il ne sera pas utilisé comme source de données. – Housni
Si je comprends le problème, vous aurez un adaptateur auth TR42 qui implémente la méthode check(), où vous avez besoin de POST des données d'identification à un point de terminaison http quelque part. Vous pouvez instancier un objet Service et effectuer cet appel, ou créer une source de données HTTP pour laquelle vous allez configurer une connexion (avec Connections :: add). La source de données HTTP contient une instance de Service qui vous permet d'appeler la méthode post() (ou send ('post', ...)). Voir https://github.com/UnionOfRAD/lithium/blob/master/data/source/Http.php#L24 –