2

私のログイン方法では、データベース内のパスワードがユーザーによって送信されたパスワードに対応しているかどうかを確認しようとしています。私はこのコードを使用します:

@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
db = get_db()
if request.method == 'POST':
    cur = db.execute('select password from users where username = ?', (request.form['username'], ))
    password = cur.fetchone()
    print password
    print request.form['password']
    if request.form['password'] != password:
        error = 'Invalid username/password combination'
    else:
        session['logged_in'] = True
        flash('You were logged in')
        return redirect(url_for('show_entries'))
return render_template('login.html', error=error)

たとえば、パスワードがデフォルトの場合、printコマンドは次のように表示します。

print password : (u'default',)
print request.form['password'] : default

したがって、それらは確かに等しくありません。誰かがこれを修正する方法を知っていますか?

4

1 に答える 1

4

データベースから返される各行は、列のタプルです。1 つの行 ( ) を取得.fetchone()しましたが、その行は 1 つの要素を持つタプルです (列のみを選択しましたpassword)。インデックスを使用してタプルから取り出すだけです。

password = cur.fetchone()[0]
于 2012-11-13T17:41:04.160 に答える