2016-12-25 26 views
0

ログインのためにこのコードを書いていますが、動作させることができません。データベースに格納されている資格情報の正しいセットを入力しても、「Invalid Credentials Please Try Again」というメッセージが返されます。Flask Login with SQLite

これがなぜ機能していないのか、あるいは非常に高く評価されるであろう解決策を提示する人はいないでしょうか。ありがとうございました。

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() 
を持っていると仮定