Forum >> Programmazione Python >> Files e Directory >> Problema con uno script

Pagina: 1

Salve, ho da poco iniziato a scrivere uno script per diletto in Python, ma sto riscontrando un problema il quale non sono riuscito a risolvere.
Questo script dovrebbe essere la parte iniziale, ovvero quella di Login di un software. Il problema che ho riscontrato è il seguente:

anche se nei file dove vengono salvate le credenziali (sottoforma di hash) non sono presenti i dati inseriti dall' utente al momento della registrazione, il software permette l'accesso e scrive a schermo 'Access approved' cosa che dovrebbe fare solo se le credenziali sono presenti nel file.

Il programma dovrebbe funzionare così:

Scegli se far Loggare o Registrare l'utente.

Se l'utente sceglie di loggare, chiedi username, password e conferma password.

Se non presente, crea un file per le credenziali.

Salva i dati sottoforma di hash.




Se l'utente sceglie di registrarsi, chiedi username e password.

Tramuta i dati in hash.

Se questi hash sono presenti nel file, procedi con il programma e comunica all' utente che il login è andato a buon fine.

Altrimenti comunica all' utente che i dati sono errati e chiedi nuovamente username e password.










Ps: Lo script, dopo la registrazione, chiederà di scrivere '/home' per accedere. Tuttavia questo comando non è ancora attivo, perciò sarà necessario riavviare il programma.




Grazie della pazienza.

Allego lo script.
Allegati
guarda, detto in breve l'errore sta alla riga 56-57... quella cosa non vuol dire nulla, è un test sempre vero. Probabilmente volevi dire qualcos'altro e ti sei perso: forse anche perché nomini le tue variabili in modo poco comprensibile, e sicuramente perché quel codice è una filastrocca ininterrotta che cerca di fare tutto in una volta sola. Dovresti scomporlo in diverse funzioni, ciascuna che si occupa di un problema e un problema soltanto, e quindi comporre le funzioni in un ciclo "main" principale. Almeno così puoi testare ciascuna funzione in modo separato e chiaro.


Detto questo, la prima cosa sarebbe almeno fare un po' di chiarezza sulla terminologia, no? In un normale accesso, ci sono due procedure:
- "login" o "accedi" per le persone che si sono già registrate;
- "register" o "registrati" (o "new user", "nuovo utente") per le persone che vogliono registrarsi per la prima volta.


Nel tuo post qui sopra le chiami "loggare" e "registrare" e INVERTI le procedure (mi ci è voluto un po' per capire che cosa diavolo stavi dicendo); nel tuo script le chiami "login" e "signin" (che sono sinonimi)... boh, forse un po' di chiarezza alla base ti aiuterebbe a districarti nelle varie possibilità...

https://leanpub.com/capirewxpython : Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com : Python in Windows, il mio blog e le mie guide
Grazie e scusa della confusione. Ho riscritto da capo lo script in maniera più ordinata, scomposta nelle varie funzioni e con a fianco la spiegazione di ciò che intendo fare riga per riga. Tuttavia non ho risolto il mio problema iniziale. Allego il nuovo file.

--- Ultima modifica di Maxwell in data 2020-03-09 14:05:28 ---
Allegati
Non ci siamo capiti.


Quando dico "funzioni, ciascuna che si occupa di un problema e un problema soltanto", quello che intendo dire è "CIASCUNA CHE SI OCCUPA DI UN PROBLEMA E UN PROBLEMA SOLTANTO". Capisci che roba? Ho scritto "ciascuna che si occupa di un problema e un problema soltanto", e proprio questo è esattamente quello che intendevo dire. Non intendevo dire un'altra cosa. Intendevo dire proprio quella.


Allora, riproviamo più lentamente.

ESERCIZIO

Scrivi esattamente SEI funzioni:


1) "ask_user_for_name" che chiede il nome all'utente. Restituisce una stringa con il nome.
2) "ask_user_for_psw" che chiede la password. Restituisce una stringa con la password immessa.
3) "ask_user_for_psw_and_confirm" che chiede la password due volte. Restituisce una stringa con la password, oppure None se l'utente immette un'altra cosa la seconda volta.
4) "find_user" che prende il nome di un utente come argomento, apre il file e cerca quel nome. Se lo trova, restituisce la password corrispondente, altrimenti restituisce None
5) "save_user", che prende come argomento il nome di un utente e la password corrispondente, apre il file e ce li scrive dentro
6) "hash_psw", che prende la stringa della password in chiaro e restituisce il suo hash (cosa che non ha senso pratico, ma vabbè)

In tutto questo, scegliamo di non coprire il caso in cui l'utente si registra, ma in realtà il suo nome esiste già nel file (vuoi perché sta cercando di cambiare password, vuoi perché c'è un omonimo). Lasciamo perdere, perché avendo scelto un file di testo per memorizzare i dati, è molto scomodo da usare.
Inoltre nota che nessuno, ma proprio nessuno si sognerebbe di fare l'hash dell'username. Già non ha senso farlo della password, ma il nome proprio no.


Scrivi queste funzioni e verifica che siano corrette. Poi scriviamo le altre. Ce ne vogliono almeno altre quattro, se faccio bene il conto.




https://leanpub.com/capirewxpython : Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com : Python in Windows, il mio blog e le mie guide


Pagina: 1



Esegui il login per scrivere una risposta.