REST API login
-
Hallo, ich versuche mich über die Rest API einzuloggen und dann einen Abruf der Gruppen einer Person zu starten. Das einloggen scheint zu klappen als Rückmeldung bekomme ich ein Object mit success und einer Person ID. Allerdings der zweite Aufruf endet mit einem Session expired. Ich fange gerade erst an mich mit Rest API auseinanderzusetzen und würde mich über ein paar Tipps freuen. Im forum habe ich gelesen das ich ein Session Cookie zurück bekomme, das kann ich aber nicht finden. Hier mal mein Code zum Login.....
<?php session_start(); $data = array( 'username' =>'username', 'password' =>'PW', ); $headers = array( 'Content-Type' => 'application/json' ); $data2 = http_build_query($data); $ch = curl_init(); $url = "https://domain.de/api/login"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $resp = curl_exec($ch); if($e = curl_error($ch)) { echo $e; } else { $decode = json_decode($resp); $id = $decode->data->personId; print_r($decode); } print_r($_COOKIE); print_r($_SESSION); curl_close($ch); $ch = curl_init(); $url = "https://domain.de/api/persons/2/logintoken"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $resp = curl_exec($ch); if($e = curl_error($ch)) { echo $e; } else { $decode = json_decode($resp); print_r($decode); }
-
@m_k ich habe es mit php curl auch nicht hinbekommen. du musst das cookie wieder zurück liefern, welches beim Login in der Response war. Dazu musst du den Response-Header auslesen.
Inzwischen baue ich an einer Spielwiese für das api: https://github.com/bwl21/ct-api-tools/tree/develop. Das ist ein Fork ...
Dort habe ich ein Verzeichnis showcase in dem ich atomare Fälle ausprobiere.
Aber wenn du in den Code in cthelper.inc reinschaust (CT_sendRequest) dann findest du wie das mit den Cookies gemacht ist.
-
Ja die frage ist nur wie man das cookie zurückliefern muss. Auslesen aus dem Header ist ja nicht das Problem. Aber wenn ich beim zurückliefern ein CURLOPT_COOKIE benutze bekomme ich nur ein session expired zurück.
Muss doch irgendwie funktinieren. Hat noch jemand eine Idee wie das mit PHP und Curl funktioniert?
-
@m_k ich habe das mit php curl aufgegeben, nachdem ich den code von fodinabor gefunden habe. Es brachte für mich keinen weiteren vorteil. Ich habe es mit curl auch nicht hinbkommen, das cookie wieder bei den Aufrufen mitzuschicken.
und wenn du den code zum senden von requests in einer Klasse oder funktion verkapselst, kannst du das ja leicht auswechseln.
-
Auch in diesem Fall ist der Browser wieder unser Freund und kann uns helfen zu verstehen wie man Cookies sendet.
Einfach mal die Entwicklerkonsole im ChurchTools Frontend öffnen und die Header eines Requests anschauen.Schlussendlich muss das Cookie als Header geschickt werden. Hier die Dokumentation von Mozilla dazu: https://developer.mozilla.org/de/docs/Web/HTTP/Headers/Cookie
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: ct_testdavid=bizlub34qv5b03457nqvb3547"));