auth ohne composer möglich ? Zb Curl oder Ajax ?


basti1012

Erfahrenes Mitglied
Der Title ist vieleicht etwas verwirrend aber weiß nicht wie ich den sonst nennen kann.,

Ich habe eine Api , wenn man den Link direkt anklickt kommt ein Browser Fenster mit Passwort und Name ( wie bei htaccess ).
Bei der Anleitung der Api muß man einen Composer runterladen.
Die schreiben aber auch das es mit vielen Programmiersprachen laufen würde , aber zeigen nur diese eine Anleitung.

Nicht jeder hat Php und nicht jeder möchte so ein Composer.
Habe schon viel mit Curl rumgespielt aber kriege es nicht hin.
Mit JS ? Wüßte nicht wie das gehen soll ?

Habt ihr nee idee wie man das machen kann ohne den Composer?
 

basti1012

Erfahrenes Mitglied
Das wäre nee möglichkeit , doch wollte ich die Frage auch so wissen ohne den Api.
Habe es jetzt aber mit Curl hinbekommen das die Zugangsdaten von den Verzeichniss Schutz mitgesendet werden und ich über anderen Server Zugriff bekomme.

Jetzt wäre es noch schön zu wissen ob man das mit Ajax auch irgendwie machen könnte.
 

ComFreek

Mod | @comfreek
Moderator
Composer ist ein Package Manager für PHP. Ergo brauchst du Composer nicht. Aber die damit installierten Pakete schon. Hier installieren sie Guzzle, was wohl ein HTTP Client für PHP ist: Guzzle, PHP HTTP client — Guzzle Documentation

Jetzt wäre es noch schön zu wissen ob man das mit Ajax auch irgendwie machen könnte.
Solange es HTTP(S)-Anfragen sind und der Server entsprechende CORS-Header aktiviert hat, sollte das definitiv gehen. Probier es doch mal :)
 

basti1012

Erfahrenes Mitglied
Probier es doch mal
Ja , das ich es mit Curl hinbekommen habe ( ohne den Composer und co ) ist für mich schon mal ein Erfolg.
Nur bei Js ( Ajax) frage ich mich wie ich die Einlogdaten von Verzeichniss Schutz damit senden sollen ?
Als data{name:'basti1012',passworrt:1234}, wird das ja nicht klappen.
Ich konnte aber auch noch nix erfolgreiches ergoggeln.
Bin aber dran , weil den Verzeichniss Schutz so umgehen ( doofe Bezeichnung jetzt , aber ihr wisst was ich meine ) könnte ich auch für andere Vorhaben mal gebrauchen.
Habe sonst immer ein Php Login gebaut wie man es aus Foren,Chats und co kennt.
Ein Verzeichniss Schutz währe für Admin Ordner ja nicht verkehrt oder ?
 

basti1012

Erfahrenes Mitglied
Danke, den Namen hatte ich vergessen.
1000 mal gelesen und gehöhrt aber trotzdem Namen vergessen.
Alles das was ich googeln konnte hat nicht geklappt.
Auch der erste Treffer von Stackoverflow funktioniert irgendwie auch nicht.
Erst kamen CORS probleme zurück und dann 401 Probleme.
Weiß nicht wo da der Fehler ist.

Da ich aber die Php Lösung habe ist das auch Ok.
 

basti1012

Erfahrenes Mitglied
Ich habe mal bei mir ein Ordner mit Schutz erstellt und mein Code da getestet.
Da geht alles.
Mit Php so ( klappt auch bei der Api )
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);

$url = 'http://sebastian1012.bplaced.net/api-weiterleitung/verzeichniss_schutz/index.php';
$username = 'basti';
$password = '1234';
$ch = curl_init($url);
$headers = array(
    'Authorization: Basic '. base64_encode("$username:$password")
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if(curl_errno($ch)){
    throw new Exception(curl_error($ch));
}
echo "<pre>";
print_r($response);
echo "</pre>";
?>
Meine Js versuche sehen so aus und funktionieren bei mir ( aber nicht bei der Api ).
Javascript:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>

data='basti:1234';
// Jquery beforeSend
$.ajax({
    xhrFields: {
        withCredentials: true
    },
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', 'Basic ' + btoa(data));
    },
    url: "http://sebastian1012.bplaced.net/api-weiterleitung/mit-php.php"
}).done(function( dat ) {
    console.log('Jquery beforesend'+dat);
})


// using jQuery & 'headers' property
$.ajax({
    xhrFields: {
        withCredentials: true
    },
    headers: {
        'Authorization': 'Basic ' + btoa(data)
    },
    url: "http://sebastian1012.bplaced.net/api-weiterleitung/mit-php.php"
}).done(function( dat ) {
    console.log('Jquery header'+dat);
})


// using XMLHttpRequest
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://sebastian1012.bplaced.net/api-weiterleitung/mit-php.php", true);
xhr.withCredentials = true;
xhr.setRequestHeader("Authorization", 'Basic ' + btoa(data));
xhr.onload = function () {
    console.log('Natives javascript '+xhr.responseText);
};
xhr.send();

// using Fetch API
var myHeaders = new Headers();
myHeaders.append("Authorization", 'Basic ' + btoa(data));
fetch("http://sebastian1012.bplaced.net/api-weiterleitung/mit-php.php", {
    credentials: "include",
    headers: myHeaders
}).then(function (dat) {
    console.log('Mit fetch '+dat);
});
</script>
Beim Js kommt immer Cors probleme zurück.
Umgehe ich die Cors kriege ich die nicht autorisierte Meldung.

Wie gesagt bei mir auf Server gehen alle dieser Codes , bei der Api nicht.
Hast du da noch nee Idee ?
 

ComFreek

Mod | @comfreek
Moderator
Was sagt die Javascriptkonsole? Gibt es irgendwelche Fehler außer CORS? Du solltest bei der Fetch-API auch den .catch Handler nicht vergessen.
Auf jsFiddle bekomme ich mit Microsoft Edge die Meldung
SEC7111: [Mixed-Content] Der Ursprung "JSFiddle - Code Playground" wurde in einem sicheren Kontext geladen, hat aber versucht, eine unsichere -Ressource bei "http://sebastian1012.bplaced.net/api-weiterleitung/mit-php.php" zu laden.
Führst du dein Skript auch auf einer HTTPS Resource aus?

Hast du CORS-Header auf deinem Server eingerichtet?