Benutzername und Passwort über GET/POST?
Eingetragen von luti (18)
am 28.04.2015 - 21:45 Uhr in
am 28.04.2015 - 21:45 Uhr in
Hallo zusammen,
ist es irgendwie möglich, eine geschützte Seite aufzurufen und dabei den Benutzernamen und das Passwort mitzuschicken, ohne sich über die Anmeldemaske anzumelden? Also entweder über die URL (GET) oder per POST?
Fiktives Beispiel: www.example.com/my-page?user=test&pw=test
Hintergrund ist, dass ich eine Seite, für eine Anmeldung erforderlich ist, per cURL auslesen möchte ... Mit CURLOPT_HTTPAUTH=CURLAUTH_ANY und CURLOPT_USERPWD='test:test' funktioniert es leider nicht ... Oder kann ich ein Cookie mitschicken? Irgendwelche Ideen?
Besten Dank und Grüße
luti
- Anmelden oder Registrieren um Kommentare zu schreiben
ja, das geht.ich würde
am 29.04.2015 - 01:57 Uhr
ja, das geht.
ich würde allerdings Username und Passwort entweder über Post verschicken oder als Cookie.
Außerdem würde ich es zumindest base64 verschlüsseln. Bringt nicht viel, sieht aber besser aus.
Du kannst dann den Login z.B. mit der folgenden kleinen Ergänzung in der THME_preprocess_node Funktion realisieren:
if( isset($_POST['u_name']) AND isset($_POST['p_wort']) )
{
$username=base64_decode($_POST['u_name']);
$password=base64_decode($_POST['p_wort']);
if (user_authenticate($username, $password)) {
$user_obj = user_load_by_name($username);
$form_state = array();
$form_state['uid'] = $user_obj->uid;
user_login_submit(array(), $form_state);
drupal_goto("user");
return true;
}
else {
return false;
}
}
In diesem Beispiel habe ich POST gewählt und die Variablen heißen u_name und p_wort, aber das siehst du ja oben auch.
Mit der Zeile drupal_goto(XXX) kannst du den eingeloggten User dann auch zu einer beliebigen Seite schicken, es muß ja nicht user sein.
Gruß
Berthold Lausch
Drupal Video-Tutorials
Mit cURL bekomme ich das nicht hin!
am 29.04.2015 - 20:40 Uhr
Hallo,
besten Dank für die hilfreiche und ausführliche Erklärung!
Das bringt mich schon ein Stück weiter - über GET / POST per URL / Formular funktioniert die Abfrage und der redirect nun ...
ABER: Mit cURL bekomme ich das nicht hin! Wenn man sich die zurückgelieferten Header anschaut, so kommt erst ein 302 (redirect) - das wird die Anmeldung sein - und dann ein 200 mit dem Inhalt der eigentlichen Seite, die aufgerufen werden soll.
Der gleiche Aufruf über cURL liefert als Ergebnis das Grundgerüst der Seite mit der Anmeldebox zurück. Ich erhalte nicht die Fehlerseite, der Nutzer ist also angemeldet, nur kommt nicht das Ergebnis der Weiterleitung zurück.
<?php
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
?>
Sobald ich
<?php
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
?>
<?php
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
?>
Wie mache ich es richtig?
Besten Dank und viele Grüße!
Hier noch mein cURL-Aufruf:
<?php
$url = 'https://www.example.com/site/';
$postopt = array('u_name' => '***', 'p_wort' => '***', 'target' => $term);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
#curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
#curl_setopt($ch, CURLOPT_AUTOREFERER, true);
#curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); # SSL-Verifizierung abschalten
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, '**:**'); # habe da noch eien htaccess-Schutz drauf ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postopt);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$output = curl_exec($ch);
$curlerror = curl_error($ch);
if($curlerror)
{
#...
}
curl_close($ch);
echo $output;
?>