Wie kann ich eine HTML und JavaScript Login-Funktion mit nur einer Passwortmöglichkeit machen?

5 Antworten

Bin mir recht sicher, dass getElementsByName() ein Array von Elementen zurückliefert. Da fehlt ein [0] vor dem .value.

Debug mal in Firefox mit F12.

Die Prüfung müsste verschlüsselt sein, falls du es in JavaScript machst. So ist das total unsicher.

Hashe das Passwort und vergleiche mit dem richtigen Hash. Das ist nur ein Ansatz.

Richtig muss es auf dem Server geprüft werden und wenn ok, dann wird der nächsteTeil geladen.

document.getElementsByName gibt ein Array (genauer gesagt, eine NodeList) zurück, x ist daher undefined.

Mit F12 kannst du die Browser-Konsole öffnen. Hier lässt sich der Quelltext der Seite lesen, und zwar auch das JavaScript. Wenn jemand auf die Seite will, aber das Passwort nicht kennt, muss also nur die Browser-Konsole öffnen, um das Passwort herauszufinden.

JavaScript ist nicht geeignet, um eine Website mit einem Passwort zu schützen. Hast du einen Webserver? Dann kannst du die Website vom Server aus mit einem Passwort sichern.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium

Die eigentlichen Probleme deiner Anwendung wurden schon benannt, doch da gibt es noch ein paar andere Punkte, die entweder fehlerhaft sind oder noch verbessert werden sollten.

1) Dieses Element:

<sectionAnmeldung><!-- ... --></sectionAnmeldung>

gibt es nicht. Vermutlich ist dir der letzte Teil dahintergerutscht. Das Element muss section heißen.

2) Du verwendest hier:

<a>Passwort:</a>

einen Link ohne Ziel (href). Demnach ist das Element falsch gewählt. Vergib entweder eine Zieladresse oder nutze irgendein anderes Element. Ein Label wäre passend:

<label for="password">Passwort:</label>
<input id="password" type="password" name="myPw" placeholder="Password" />

3) Da du kein Formular verwendest und die Daten nur mit JavaScript auswertest, bedarf es keines submit-Buttons.

<input type="submit" name="" value="Einloggen" onclick="pwRichtig()" required />

Ein normaler Button reicht aus:

<input onclick="pwRichtig()" type="button" value="Einloggen" />

Das required-Attribut ist an dieser Stelle eh unnütz und das name-Attribut (welches eigentlich gar nicht leer sein darf) kannst du dir in so einem Fall ebenso sparen.

4) Der Wert eines name-Attributs ist nicht eindeutig. Das heißt, es darf durchaus mehrere Elemente geben, die den gleichen Wert für ihr name-Attribut besitzen. Daher gibt getElementsByName eine NodeList zurück.

Besser wäre es, du würdest IDs nutzen, wenn du über das DOM ein ganz bestimmtes Element mit JavaScript ansprechen möchtest.

<input id="password" type="password" placeholder="Password" />
<script>
  const passwordField = document.getElementById("password");
</script>

Relevanz erhält das name-Attribut hingegen wieder, wenn du die Daten via Formular an eine Serveranwendung verschicken möchtest (bspw. ein PHP-Skript). Setze die Formularelemente dafür in ein form-Element.

Eine Passwort-Abfrage per JavaScript macht keinen Sinn. So kann jeder das Passwort auslesen, der sich den Quellcode der Webseite ansieht.

dir ist aber schon klar, dass JEDER deinen JavaScript Code lesen kann und dass du damit rein gar nichts absicherst?

Dieses Element ist dazu da, dass man das Kennwort bei der Eingabe nicht sieht. Die Prüfung muss immer Serverseitig erfolgen.

Woher ich das weiß:Berufserfahrung