2016-12-25 104 views
0

我已经为我的登录编写了这段代码,但是我无法让它正常工作。即使输入存储在数据库中的一组正确的凭证,也会返回“无效的凭证请重试”消息。烧瓶用SQLite3登录

任何人都可以提供一些指示,为什么这不工作或提供一个解决方案,将不胜感激。谢谢。

def connect_db(): 
    return sqlite3.connect(app.database) 

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    error = None 
    if request.method == 'POST': 
     username = request.form['username'] 
     password = request.form['password'] 
     validate_user = validate(username, password) 
     if validate_user == False: 
      error = 'Invalid Credentials Please Try Again' 
      return render_template('index.html', error=error) 
     else: 
      return redirect(url_for('loggedin')) 
    return render_template('index.html', error=error) 

def validate(username, password): 
    g.db = connect_db() 
    Validation = False 
    with g.db: 
     cursor = g.db.execute("SELECT * FROM Users") 
     rows = cursor.fetchall() 
     for row in rows: 
      database_user = row[1] 
      database_password = row[2] 
      if database_user == username: 
       Validation = check_password(database_password, password) 
    return Validation 

def check_password(hashed_password, user_password): 
    return hashed_password == hashlib.md5(user_password.encode()).hexdigest() 

回答

0

假设你的用户表中的列 '用户名' 和 '密码'

import sqlite3 
from flask import g 

DATABASE = '/path/to/database.db' 

def get_db(): 
    db = getattr(g, '_database', None) 
    if db is None: 
     db = g._database = sqlite3.connect(DATABASE) 
    return db 


@app.route('/', methods=['GET', 'POST']) 
def index(): 
    error = None 
    if request.method == 'POST': 
     username = request.form['username'] 
     password = request.form['password'] 
     validate_user = validate(username, password) 
     if validate_user == False: 
      error = 'Invalid Credentials Please Try Again' 
      return render_template('index.html', error=error) 
     else: 
      return redirect(url_for('loggedin')) 
    return render_template('index.html', error=error) 

def query_db(query, args=(), one=False): 
    cur = get_db().execute(query, args) 
    rv = cur.fetchall() 
    cur.close() 
    return (rv[0] if rv else None) if one else rv 

def validate(username, password): 
    g.db = connect_db() 
    user = query_db('SELECT * FROM Users WHERE username = ?', 
        [username], one=True) 

    return False if user is None else check_password(user['password'], password) 

def check_password(hashed_password, user_password): 
    return hashed_password == hashlib.md5(user_password.encode()).hexdigest()