2017-04-18 5 views
0

abrufen So schreibe ich ein einfaches Login-Skript in Python CGI. Es funktionierte nicht auf dem localhost, (500 Fehler zeigend), so dass der Code selbst ausgeführt wurde, gab es Code-Probleme. Der Code lautet wie folgt:Kann Hash Passwort nicht von PostgreSQL Datenbank mit Python

#!/usr/bin/python2.7 
import cgi 
import cgitb 
import hashlib 
import psycopg2 
from dbconfig import * 
cgitb.enable() 
print "Content-Type: text/html" 


def checkPass(): 
    email = "[email protected]" 
    password = "blahblah" 
    password = hashlib.sha224(password.encode()).hexdigest() 
    result = cursor.execute('SELECT * FROM logins WHERE email=%s passhash=%s') % (email, password) 
    print str(result) 


if __name__ == "__main__": 
    conn_string = "host=%s dbname=%s user=%s password=%s" % (host, database, dbuser, dbpassword) 
    conn = psycopg2.connect(conn_string) 
    cursor = conn.cursor() 
    checkPass() 

Die Linie, die das Programm auf die cursor.execute der postgre Abfrage stecken bleibt. Der angezeigte Fehler ist wie folgt:

Traceback (most recent call last): 
    File "login.py", line 28, in <module> 
    checkPass() 
    File "login.py", line 20, in checkPass 
    result = cursor.execute('SELECT * FROM logins WHERE email=%s passhash=%s') % (email, password) 
ProgrammingError: syntax error at or near "passhash" 
LINE 1: SELECT * FROM logins WHERE email=%s passhash=%s 

Und es sollte beachtet werden, dass es auf Passhash verweist. Ich habe versucht, die Abfrage direkt in den db in psql Konsole eingeben wie:

SELECT * FROM logins WHERE passhash=storedhashedcode; 

Doch diese gibt einen Fehler über eine Säule des Namens des Hash (d e342hefheh43hfhfhefherf .... etc) nicht vorhanden. Was mache ich hier falsch? Das einzige, was mir einfällt, ist, dass Hashes anders gespeichert werden.

Hinweis - hier ist der Code, den ich das Passwort usw. zu speichern, verwendet wird, wenn das hilft:

email = "[email protected]" 
allpass = "blahblah" 
password = hashlib.sha224(allpass.encode()).hexdigest() 
cursor.execute('INSERT INTO logins (email, passhash) VALUES (%s, %s);', (email, password)) 
conn.commit() 

Jede Hilfe wäre sehr dankbar!

UPDATE:

result = cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s') % (email, password) 

erzeugt dies nun der Fehler:

Wie Decly vorgeschlagen, ich die Abfrage geändert haben

ProgrammingError: column "s" does not exist 
LINE 1: SELECT * FROM logins WHERE email=%s AND passhash=%s 

So ist es offensichtlich ist, als ein mit Spalte aus irgendeinem Grund. Warum nimmt es meine Variablennamen nicht auf?

Antwort

1

In:

'SELECT * FROM logins WHERE email=%s passhash=%s' 

Sie vermissen ein und in der Booleschen Ausdruck:

'SELECT * FROM logins WHERE email=%s AND passhash=%s' 

Wenn Sie die Abfrage in psql schreiben Sie die Angebote für die Stringliteral fehlen, so postgresql ist Wenn Sie einen Spaltennamen ableiten, sollten Sie schreiben:

SELECT * FROM logins WHERE passhash='storedhashedcode'; 

Sie setzen auch die Parentesis in die falsche Stelle soll der Python Satz sein:

result = cursor.execute('SELECT * FROM logins WHERE email= %s AND passhash= %s', (email, password)) 
+0

Ok, ich habe die hinzugefügt und wie vorgeschlagen, aber jetzt wirft sie die gleichen Fehler wie vorher, nur in Bezug auf das '% s' –

+0

sorry, nicht ganz der gleiche Fehler, jetzt nimmt es s in als eine Zeichenfolge scheint es, und nicht in die Variablen. –

+0

Verstanden. Anscheinend stellst du keine Fragen auf die Art und Weise auf, die ich hatte. Jetzt gibt es ein anderes Problem, aber das ist ein ganz anderer Kessel Fisch. –

Verwandte Themen