Formular direkt ausfüllen mit HTML

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.178
Reaktionspunkte
4
Hallo,

Ich möchte ein Login in eine externe Seite in mein eigenes Script einfügen, sprich das Login automatisieren.
Leider begreife ich jedoch nicht, wie das Login auf dieser Seite genau gemacht wird... Es ist wohl kein simples POST Formular...

Wer kann helfen? Wie kann ich mich direkt einloggen, bzw. wie wurde das auf dieser Seite gemacht?

https://student.classdojo.com/#/login

Danke und Gruss,

Léo
 
Die eingegeben Daten werden per POST an einen Webservice unter https://student.classdojo.com/api/dojoSession geschickt.
Im Terminal kannst du z.B. den Response Header mit
Code:
curl -X POST 'https://student.classdojo.com/api/dojoSession' -d 'login=BENUTZER_NAME&password=PASSWORD'
bekommen.

Im Browser selber logst du dich mit dem hier schonmal ein:
Code:
document.body.innerHTML += '<form id="tmpForm" action="https://student.classdojo.com/api/dojoSession" method="post"><input type="hidden" name="login" value="BENUTZER_NAME"><input type="hidden" name="password" value="PASSWORD"></form>';
document.getElementById("tmpForm").submit();
musst aber selber noch zur vorherigen Seite zurückkehren (hab jetzt nicht genauer nachgeschaut, aber ein setzen der Werte über document.forms[0].elements[0].value="value" scheint er zwar anzunehmen aber nicht bei einem document.forms[0].submit() zu berücksichtigen)
Vlt hilft ein history.go(-1);, je nach dem wo und wie du das ganze aufrufst.

in mein eigenes Script einfügen

Wie meinst das bzw. was für ein Script?
 
Ich möchte das Login-Formular automatisch absenden für verschiedene User. Ich würde also (mittels PHP oder Javascript) das entsprechende Login und Passwort setzen und müsste dann direkt eingeloggt werden auf der Seite.

Habe es leider noch nicht geschafft...

Danke für Tipps und Hilfe!

Léo
 
Doch: So gehts. dojoSession wird angezeigt und da bin ich dann eingeloggt.

Code:
{"type":"student","student":{"_id":
Scheint Json zu sein?

Was ich also machen müsste wäre:

Überprüfen, ob classDojo ein success zurückgibt und wenn ja weiterleiten an https://student.classdojo.com/#/.

Wie könnt ich das machen?

Danke und Gruss,

Léo
 
Habs mit jquery.post hinbekommen...

Danke und Gruss!
 
Stimmt nicht... Auf dem iPhone lokal (mit so einem javascript app) funktioniert es, auf dem Mac kommt jedoch die Fehlermeldung ...is not allowed by Access-Control-Allow-Origin.

Was tun?

Danke!

Léo
 
Wenn ich das direkt auf der Seite (z.B. in der Console des Browsers) ausführe, funktioniert es:

Code:
var request = new XMLHttpRequest();
request.open('POST', 'https://student.classdojo.com/api/dojoSession', true);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.onreadystatechange = function() {if (request.readyState==4 && request.status == 200) window.location.reload()};
request.send("login=BENUTZERNAME&password=PASSWORD");

...is not allowed by Access-Control-Allow-Origin.

Du führst nen Cross Domain Request aus, dieser wird geblockt. Stichwort: Same-Origin-Policy
Wenn du uns verraten würdest wo du welchen Code genau ausführst, kann man mal schauen wie man das lösen kann.

Sonst sollt's der oben stehender Code aber auch tuen.
 
Der Code soll in ein Webscript. (Javascript, jQuery oder PHP).
Also eine Website mit einem Button (Login) und beim Klicken darauf wird man automatisch eingeloggt auf die Seite weitergeleitet.
 
Wenn der Server auf der Gegenseite nicht CORS unterstützt und explizit Access-Control-Allow-Credentials: true sendet wird es wirklich schwer.
Könnte noch über ein Javascript Bookmark oder lokal liegenden Dateien geschehen, per Button Klick auf Seite A sich in Seite B einzuloggen sollte aber nicht ohne weiteres möglich sein.

EDIT: Vlt. lässt sich da was mit iframes basteln.
 
An iFrames habe ich auch gedacht aber das ist auch gesperrt... (X-Frame-Options)
Auf die Gegenseite habe ich leider keinen Einfluss... Evtl. mit versteckten Popups oder so? Oder was ist mit JSONP ? (versteh ich nicht ganz...)
 
Wer hätt's gedacht:

Code:
function login(){
  var iframe = document.createElement("iframe");
  var uniqueString = "UNIQUE_ID";
  document.body.appendChild(iframe);
  iframe.style.display = "none";
  iframe.contentWindow.name = uniqueString;

  var form = document.createElement("form");
  form.target = uniqueString;
  form.action = "https://student.classdojo.com/api/dojoSession";
  form.method = "POST";

  // login
  var login = document.createElement("input");
  login.type = "hidden";
  login.name = "login";
  login.value = "BENUTZERNAME";
  form.appendChild(login);

  // password
  var password = document.createElement("input");
  password.type = "hidden";
  password.name = "password";
  password.value = "PASSWORD";
  form.appendChild(password);

  document.body.appendChild(form);
  form.submit();
  
  setTimeout(function(){window.location="https://student.classdojo.com/#/login"}, 3000);
}

Zumindest am Mac/PC funktioniert das, musst vlt. noch ein bisschen mit dem setTimeout rumspielen.
Das Auslesen des Postrequest im iframe wird durch die Same-Origin Policy verhindert, die eingegebenen Benutzerdaten sollten also zwingend richtig sein ;)
 
Oh! Das scheint wirklich zu funktionieren. Ich nehme an statt des Timeouts kann man keine Überprüfung machen, ob etwas geladen wurde...?

Was nun noch fehlt: wie umgehe ich das iFrame? Ich möchte die Seite unterhalb einer (eigenen) Menüleiste öffnen, mit der man die Seite auch wieder schliessen kann, bzw. eine andere Seite öffnen kann... Ohne iFrames wird das wohl schwierig...

Danke!
Léo
 
Oh! Das scheint wirklich zu funktionieren. Ich nehme an statt des Timeouts kann man keine Überprüfung machen, ob etwas geladen wurde...?

Nein, wie schon gesagt wird dies durch die SOP verhindert.

Ähnliches gilt für die iframes. Wenn der Server "X-Frame-Options SAMEORIGIN" sendet kannst du da leider nicht viel gegen machen.
Mit diesem Proof of Concept bekommst du die Seite zwar in das iframe hinein du kommst aber nicht weiter als der ladebildschirm.

Bildschirmfoto 2015-05-17 um 21.07.51.jpg
 
Schade... Dann muss ich eine andere Lösung finden... Im schlimmsten Fall mit einem separaten Fenster dass etwas kleiner ist und darüber ein zweites schmales Fenster mit dem Menü... Ist allerdings sehr unschön...

Danke dir für die Hilfe!

Léo
 
Wenn du eh PHP zur Verfügung hast, mach doch die Anmeldung serverseitig zB mit Guzzle. Dann erhältst du alle Daten und kannst diese Weiterverarbeiten.
 
Ja, PHP hab ich zur Verfügung. Hm, wie das aber mit Guzzle funktionieren soll ist mir nicht klar... Die Beispiele auf der Seite helfen mir auch nicht wirklich weiter... :/
Vielleicht kannst du mir helfen.
 
Code:
<?php
require_once(__DIR__ . '/vendor/autoload.php');
use GuzzleHttp\Client;

$client = new Client();

$response = $client->post('https://student.classdojo.com/api/dojoSession', [
    'body' => [
        'login' => 'USER',
        'password' => 'PASSWORD'
    ]
]);

$body = $response->getBody();
echo $body;
// usw.
 
Wenn du eh PHP zur Verfügung hast, mach doch die Anmeldung serverseitig zB mit Guzzle. Dann erhältst du alle Daten und kannst diese Weiterverarbeiten.

Er möchte doch die externe Seite in seine eigene Seite einbinden? Die Authentifizierung über den Webservice klappt ja bereits.
 
Oh, das scheint schon mal gut... Ich stehe aber noch beim Installieren an... Wie installier ich das?? Ich habe nur einen Webspace, kann also nur Dateien hochladen per FTP.

Danke!
 
Einzige Lösung, die ich gefunden habe ist ein Chrome Plugin: Ignore-X-Frame-Headers.

Gruss,
Léo
 
Zurück
Oben Unten