如何登录烧瓶?

时间:2013-11-10 12:14:08

标签: python sqlalchemy flask flask-sqlalchemy flask-login

我想知道如何通过比较数据库中的用户名和密码来登录烧瓶中的用户。 如果错误是用户名不存在flash“用户不存在” 如果该密码与用户密码不符合flash“worng passsword” 并成功闪存“您已登录”

现在我有了这段代码。

if request.method == 'POST':
    if request.form['username'] != app.config['USERNAME']:
        error = 'Invalid username'
    elif request.form['password'] != app.config['PASSWORD']:
        error = 'Invalid password'
    else:
        session['logged_in'] = True
        flash('You were logged in')
        return redirect(url_for('show_entries'))

我想更改db rahter的用户名和密码,而不是app.config

1 个答案:

答案 0 :(得分:4)

使用Flask-SQLAlchemy,然后只需检查数据库中是否有匹配的用户。此外,使用bcrypt哈希密码。在任何情况下都不能接受以明文存储密码

user = User.query.filter_by(username=request.form['USERNAME']).first()
if not user:
    error = 'Invalid username'
elif bcrypt.hashpw(request.form['password'], user.password) != hashed:
    error = 'Invalid password'
else:
    session['user_id'] = user.id  # makes more sense than storing just a bool
    flash('You were logged in')
    return redirect(url_for('show_entries'))

当然,您可能需要先定义用户表。这是一个例子:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, unique=True)
    password = db.Column(db.String)

为了使实际用户可用,我建议您使用before_request函数检查session['user_id']并在User.query.get(session['user_id'])中存储g.user(如果用户已登录)。