Witam mam pewien problem ze stworzeniem działającego panelu logowania na mojej stronie a dokładniej z funkcją check_password_hash biblioteki werkzeug.security, mianowicie funkcja rejestracji działa poprawnie, dane są wysyłane do bazy danych oraz zapisywane w niej a samo hasło jest hashowane. Problem pojawia się jednak przy samym logowaniu, ponieważ mimo iż wpisuje poprawne hasło to nie zostaje rozpoczęta sesja. Poniżej zostawiam kod być może znajdzie się jakaś dobra duszyczka chcąca mi pomóc :). Dodam także że korzystam z aktualnej wersji python oraz werkzeug.
Funkcja rejestracji:
@app.route('/api/register', methods =['POST'])
def registerf():
try:
if request.method == 'POST':
username = request.form['username']
name = request.form['name']
email = request.form['email']
password = request.form['password']
if username and name and email and password:
conn = mysql.connect
cursor = conn.cursor()
hashed_pass = generate_password_hash(password, method='pbkdf2', salt_length=16)
cursor.callproc('sp_createUser', (username, hashed_pass, name, email))
data = cursor.fetchall()
if len(data) == 0:
conn.commit()
return redirect(url_for('login'))
else:
return json.dumps({'msg': 'error'})
else:
return json.dumps({'html': '<span>error </span>'})
except Exception as e:
return json.dumps({'error': str(e)})
finally:
cursor.close()
conn.close()
Funkcja logowania:
@app.route('/api/login', methods=['POST'])
def loginf():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
cursor = mysql.connection.cursor()
cursor.callproc('sp_validateLogin', (username,))
account = cursor.fetchone()
if account:
if check_password_hash(account['Haslo'], password):
session.permanent = True
session['loggedin'] = True
session['id'] = account['id']
session['username'] = account['Login']
cursor.close()
return redirect('/home')
else:
return redirect('/login')
else:
return redirect('/register')
PROCEDURA BAZY DANYCH sp_validateLogin
BEGIN
select * from uzytkownik where login = username;
END