• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    REST API login

    ChurchTools Schnittstellen
    3
    5
    338
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • M
      M_K
      zuletzt editiert von

      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);
              }
      
      
      B 1 Antwort Letzte Antwort Antworten Zitieren 0
      • B
        bwl21 @M_K
        zuletzt editiert von

        @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.

        M 1 Antwort Letzte Antwort Antworten Zitieren 1
        • M
          M_K @bwl21
          zuletzt editiert von

          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?

          B 1 Antwort Letzte Antwort Antworten Zitieren 0
          • B
            bwl21 @M_K
            zuletzt editiert von

            @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.

            davidschillingD 1 Antwort Letzte Antwort Antworten Zitieren 0
            • davidschillingD
              davidschilling ChurchToolsMitarbeiter @bwl21
              zuletzt editiert von davidschilling

              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"));

              1 Antwort Letzte Antwort Antworten Zitieren 0
              • Erster Beitrag
                Letzter Beitrag