Login klappt in Python nicht. Was tun?

2 Antworten

Bei jedem Nutzer, der kein "" oder Admin ist, läuft die Login-Funktion immer in den else-Zweig. Du brauchst noch einen Zweig, der bspw. aus der Datenbank Nutzername und Passwort vergleicht und dann einen Nutzer duchlässt. So ist jeder Benutzer automatisch im Falscher Nutzername oder Passwort-Zweig

zR0b1n 
Fragesteller
 09.12.2021, 23:12

Brauch ich denn unbedingt eine Datenbank dafür? Also ich habe mir Videos dazu angeguckt und die haben es auch ohne Datenbank gemacht.

0
inv3st  09.12.2021, 23:15
@zR0b1n

Wenn das nur ne "Übung" ist, dann natürlich nicht. Aber wie solltest du denn vergleichen ob der Nutzer das richtige Passwort angegeben hat?

Wenn man dann Passwörter in eine Datenbank schreibt, dann Password+Salt als einen Hash und den Salt.

0
zR0b1n 
Fragesteller
 09.12.2021, 23:18
@inv3st

Also mit Entry erstelle ich ja ein Eingabefeld und das Programm soll halt überprüfen ob die Person alles richtig in die Felder eingegeben hat

0
inv3st  09.12.2021, 23:23
@zR0b1n

Ja, verstehe. Wie überprüfst du denn ob alles richtig in die Felder eingegeben wurde? Du musst dir ja irgendwie das Passwort von einem Nutzer merken?

Ahso, du willst dich nur als Admin anmelden. Dann musst du userName und userPw global in der Funktion machen und global davor schreiben

0
zR0b1n 
Fragesteller
 09.12.2021, 23:26
@inv3st

im Programm steht doch das Passwort drinnen

0
inv3st  09.12.2021, 23:28
@zR0b1n

Verstehe, mach userName und userPw global in der Funktion, da musst du global davor schreiben wie xxxcyberxxx richtig schreibt soll man auch keine globalen dafür benutzen sondern an die funktion übergeben

0
zR0b1n 
Fragesteller
 09.12.2021, 23:29
@inv3st

Danke dann werde ich das mal ausprobieren

1

Ich nehme an, du gibst Admin und test korrekt ein

Mein Problem ist jetzt, wenn ich auf „Login“ drücke kriege ich nur „Falscher Nutzername oder Passwort!“.
Weiß jemand vielleicht woran das liegt?

lass dir doch mal den Inhalt der beiden Variablen direkt vor der Benutzung ausgeben.

So wie ich das sehe, überschreibst du userName und userPw in deiner mainscreen()-Funktion mit einem Objekt des Typs Entry. Du vergleichst den String mit dem Objekt, nicht mit dessen Inhalt

zR0b1n 
Fragesteller
 09.12.2021, 23:20

das habe ich mir auch gedacht. Dazu muss man das ja so schreiben:

if userName.get()=="Admin" and userPw.get()==""test"

aber wenn ich das mache kriege ich ne fehler meldung:

AttributeError: 'NoneType' object has no attribute 'get

0
xxxcyberxxx  09.12.2021, 23:23
@zR0b1n

Da hast du dann dein Problem: userName und userPw haben den Wert "None" ... können also nicht Admin und test sein

Vermutung, dass du davor noch global userName und global userPw schreiben musst, wenn du diesen Ansatz verwenden willst

Allgemein sollte man jedoch globale Variablen vermeiden. Bündel alles in eine Klasse und arbeite dort mit Klassenvariablen

1