フラスコのマイクロフレームワークを使用しており、msyqlバックエンドを使用して手動で認証を設定しています。
私のSQLスクリプトは、ハッシュ化されたパスワードを次のデータ型で保存しています:、関数VARCHAR(50)
によって生成された後:generate_password_hash
`Password` VARCHAR(50) NOT NULL ,
VARCAHR(50)は私が思っていた以上のものです...
これらは私が使用している次のライブラリです:
from werkzeug import check_password_hash, generate_password_hash
@app.route('/login/', methods=['GET', 'POST'])
def login():
"""Logs the user in."""
if g.user: return redirect(url_for('main'))
error = None
if request.method == 'POST':
sql = "select password, userid from users where username = " + stringify(request.form['username'])
cursor = g.db.cursor()
cursor.execute(sql)
user = cursor.fetchall()
user = user[0]
password = user[0]
userid = user[1]
if user is None:
error = 'Invalid username'
elif not check_password_hash(password, request.form['password']):
error = 'Invalid password'
else:
flash('You were logged in')
session['userid'] = userid
return redirect(url_for('main'))
return render_template('login.html', error=error)
だからこれが問題です:
elif not check_password_hash(password, request.form['password']):
常にfalseを返します。
更新:私はこれを登録で取得します:
Users/Dave/Websites/fh/app.py:143: Warning: Data truncated for column 'Password' at row 1
g.db.cursor().execute("insert into users (username, email, password) values (%s, %s, %s)" % (username, email, password,))