Form a la Google - Passwort vor Daten

Nicodil

Ensign
Registriert
Juli 2015
Beiträge
136
Hi!
Ich bin gerade dabei ein Picture Upload-Script zu schreiben. Es soll folgendermaßen funktionieren:
  • Es soll ein Passwort eingegeben werden, dass der User per Email bekommen hat
  • Wenn korrekt, soll der User möglichst auf der selben Seite zum Upload-Formular "weitergeleitet" werden
  • Zu letzt, als einen weiteren "Step", eine Captcha-Kontrolle
Mein Problem ist nun, dass ich das ganze am liebsten in einer einzigen Seite, also OHNE Weiterleitung etc. bewerkstelligen möchte. Aber ich glaube, es ist nicht möglich, zwei Formulare in einer Seite zu laden (Passwort Überprüfung und Bild-Upload).
Ich wollte hierfür folgendes Struktur verwenden, nur mit meinem Ablauf (Passwort, Passwort-Überprüfung, Uploadauswahl, Captcha, Submit-Button, Upload):
https://www.w3schools.com/howto/howto_js_form_steps.asp

Hat jemand eine Idee, wie sich das bewerkstelligen lässt?
 
Hi,

Stichwort: AJAX. Du kannst teile der Seite dynamisch abschicken, nachladen oder verändern.

VG,
Mad
 
  • Gefällt mir
Reaktionen: psYcho-edgE
Wie bereits beschrieben kannst du mit JavaScript deine Seite dynamisch veraendern.
Ebenso kannst du damit, ohne die Seite neu zu laden, auch Daten an einen Server uebermitteln bzw. dir Daten holen.

Dein Ablauf waere in etwa folgender:
Aufforderung E-Mail einzugeben -> Den Server mitteilen, dass an diese E-Mail ein Code geschickt werden soll -> Response vom Server abwarten -> Ansicht zur Codeeingabe wechseln -> Aufforderung den Code einzugeben -> Code und E-Mail an Server uebermitteln und pruefen ob Code und E-Mail zusammen gehoeren -> Response vom Server abwarten -> Ansicht wechseln zu Bild-Upload -> Auffordern Bild auszuwaehlen -> E-Mail und Bild (und code) hoch laden -> Response vom Server abwarten

Da das Verwalten der View nur mit jQuery meines empfindens nach recht aufwendig ist und man schnell was vergessen kann, schau dir mal Angular an. Damit hast du recht viel Kontrolle ueber das was angezeigt werden soll, ist allerdings nicht ganz trivial.
 
Nicodil schrieb:
Ich wollte hierfür folgendes Struktur verwenden, nur mit meinem Ablauf (Passwort, Passwort-Überprüfung, Uploadauswahl, Captcha, Submit-Button, Upload):
https://www.w3schools.com/howto/howto_js_form_steps.asp

Hat jemand eine Idee, wie sich das bewerkstelligen lässt?

Du nimmst das Beispiel und passt das HTML so an, dass es mit deinem Spaß übereinstimmt. Eigentlich kein Hexenwerk. Die Hauptarbeit mit dem JS-Teil für die asynchronen Requests wurde dir ja bereits abgenommen.
 
Ich glaube ich habe mich etwas missverständlich ausgedrückt. Das Passwort und Link zur Uploadseite soll dem User zugeschickt werden. Außerdem ist das Passwort leicht zu rekonstruieren und pro Tag gibt es ca. 10 verschiedene. Dh. es wäre doch bestimmt möglich, das Ergebnis des Algorithmus für das Passwort und die Eingabe zu Vergleichen und von vorne herein schon zu sagen, dass die Eingabe mit keiner Passwort-Möglichkeiten übereinstimmt. Ist das der Fall, soll der weiter-Button einfach nicht drückbar sein. Ist dafür dann Ajax überhaupt nötig?
 
Hi,

du willst eine clientseitige Passwortprüfung? Ganz. Schlechte. Idee.

VG,
Mad
 
  • Gefällt mir
Reaktionen: Crast und psYcho-edgE
Hi,

dann lies dich entweder ein oder lass es. Eine clientseitige Passwortprüfung ist die schlechteste Idee, die man im Netz haben kann.

"Darfst du rein?"
"Jo"
"Alles klar"

Tutorials ansehen, lesen, einarbeiten. AJAX ist kein Hexenwerk. Sowas gehört einfach serverseitig gemacht. Sonst kannst du es gleich auflassen.

VG,
Mad
 
  • Gefällt mir
Reaktionen: Crast, mental.dIseASe und psYcho-edgE
Madman1209 schrieb:
du willst eine clientseitige Passwortprüfung? Ganz. Schlechte. Idee.

Say it loud for those in the back line!

Nicodil schrieb:
Ich weiß nicht, ob ich fit genug für Ajax bin :D

Ich bezweifle noch viel, viel mehr, dass du fit genug dafür bist, eine sichere clientseitige Passwortprüfung zu implementieren. Dagegen ist AJAX n Witz :p
 
  • Gefällt mir
Reaktionen: Madman1209 und Crast
Nicodil schrieb:
Ich weiß nicht, ob ich fit genug für Ajax bin :D
Wenn du fuer moderne Browser entwickelst, kannst du auch die fetch-API verwenden, das ist, finde ich, etwas schoener als ajax bzw xhr.

Aber wenn du denkst, dass du nciht fit dafuer bist, dann kann ich dir nur raten dir das wissen anzueignen dafuer.

Wenn du Interesse daran hast, wird sich sicherlich auch ein Weg finden wie man dir damit auf dem kurzen und schnellen Weg helfen kann.

Aber wie @Madman1209 schon sagte.. clientseitig sowas zu ueberpruefen ist schlecht, besonders bei JavaScript, wo praktisch jeder direkt in den Quellcode eingreifen kann zu jedem Zeitpunkt.

Was du natuerlich machen koenntest, waere dir ein Code vom Server zukommen lassen (leider auch XHR, AJAX, ...), dem Code eine Pruefsumme mitgeben die aus dem Code und der E-Mail gebildet wird und Clientseitig nur pruefen ob die Pruefsumme das ergebnis von E-Mail und Code ist, ABER auch das ist anfaellig genug. Also um Ajax kommst du da nciht drum herum.

Falls es dich interessiert. Google ueberprueft bei den Recaptchas ebenfalls das Ergebnis Serverseitig, aus dem Grund ist es so schwer Clientseitig performante Loesungen zu finden diese Recaptcha zu umgehen (vergleichbar mit Adblockern).
 
Zuletzt bearbeitet: (fix typos)
  • Gefällt mir
Reaktionen: Madman1209 und psYcho-edgE
Nicodil schrieb:
Ich weiß nicht, ob ich fit genug für Ajax bin :D

Für AJAX bist du übrigens sicherlich fit genug. Du musst eigentlich bloß grob über die Funktionsweise von HTTP Bescheid wissen. Nichts anderes ist ein AJAX-Request: ein (asynchroner) HTTP-Request.
 
So ehe wir dir hier weiterhin erzählen wie simpel solche Anfragen sind, hier ein paar Worte

HTTP ist ein Protokol um Daten zu übertragen. Wikipedia gibt dir einen Umfanreichen Einblick.
Für dich ist folgendes wichtig: Es gibt sogenannte HTTP-Methoden, diese beschreiben im groben den Zweck der Anfrage.
Für dich sollten die Methoden GET und POST interessant sein. In der Theorie kannst du auch nur mit GET arbeiten, aber wir wollen das hier ja gleich richtig machen, oder?!
Stark vereinfacht kann man sagen, dass du GET benutzt um Daten zu erhalten und POST um den Server gewisse Daten zu geben.
Als drittes solltes etwas über HTTP Status Codes wissen.
Wichtig sind
  • 200: Alles ist okay
  • 401: Unauthentifiziert, der Server weiß nicht wer du bist
  • 403: Unauthorisiert, der Server weiß wer du bist, verbietet dir aber was zu machen
  • 404: Angefragte URL nicht gefunden/gibt es nicht
  • 500: Beim Server ist etwas fehlgeschlagen, z. B. fehler im Code
So mit dem Wissen sollten AJAX-Anfragen kein Problem mehr sein.

Damit es einfach für dich wird, nehmen ich jQuery für die Anfragen. Natürlich ist das ganze auch ohne jQuery möglich, aber um einiges Umständlicher. Außerdem solltest du dann nach XHR (xmlHttpRequest) und nicht mehr nach AJAX suchen, da findet man mehr. Ich benutze dafür nicht direkt die AJAX-Funktion von jQuery, sondern benutzerfreundlichere Methoden, die intern auf die AJAX-Funktion zurück greift.

Fangen wir mit GET an. Hier wird letztendlich einfach eine URL aufgerufen.
Javascript:
$.get("http://link-zur-seite.de/die/angefragte/resource", function (data, status) {
    // some fancy shit :)
})
In der Funktion verarbeitest du die Antwort und reagierst auf sie. In dem data-Object findest du das, was der Server zurück gegeben hat und im status-Object erhälst du den HTTP-Status.

Und weiter mit Post, hier sieht die Anfrage etwas anders aus. Neben der URL werden ebenfalls Daten im JSON-Format mitgegeben.
Javascript:
var content = {
  foo: "bar"
}

$.post("http://link-zur-seite.de/die/angefragte/resource", content, function (data, status) {
    // some fancy shit
})
In der Funktion verarbeitest du, genauso wie bei GET die Antwort.

Die Funktionen die du in diesem Beispiel siehst haben zwei Besonderheiten.
Zum einen handelt es sich um sogenannte anonyme Funktionen, dass sind Funktionen, die keinen Namen haben und somit nicht referenziert werden können. Sie werden nur durchgereicht und in anderen Funktionen ausgeführt, in denen sie bekannt sind.
Die zweite Besonderheit ist, dass diese Funktionen einen weiteren Namen haben, der die Bedeutung und Funktionalität beschreibt: Callback-Function. Das sind Funktionen die übergeben werden und immer ausgeführt werden, wenn ein bestimmtes Event zutrifft, in unserem Fall die Antwort des Servers.

Sooo, aber das Problem ist, dass das nur die Lösung für den Client ist... Zu einem Client gehört immer auch ein Server.
Hier hast du jetzt mehrere Möglichkeiten, dir einen zu schreiben.
Du könntest z. B. mit einem Apache und PHP eine Lösung bauen, oder mit NodeJS.
Ebenso kannst du mit Java und Spring Boot da sehr schnell etwas aufsetzen.
Aber da stellt sich nunmal die Frage, was bzw ob du schon was verwendest.

Diese kurze Anleitung sollte dir nur zeigen, wie simpel solche Anfragen im Client gelöst werden können. Daher gibt es noch viele Punkte die unvollständig und offen sind.
Bei weiteren Fragen findest du hier genug Leute die dir gerne helfen :)
 
Zurück
Oben