flask-bcrypt - ValueError:盐无效 [英] flask-bcrypt - ValueError: Invalid salt

查看:1476
本文介绍了flask-bcrypt - ValueError:盐无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用Flask和flask-Bcrypt完成一个简单的用户登录。但是,当试图用我的数据库中存储的用户登录时,我不断收到此错误

$ $ p $ ValueError:无效salt

models.py

  class User(db.Model):

__tablename__ =users

id = db.Column(db.Integer,primary_key = True)
name = db.Column(db.String,nullable = False)
email = db.Column(db.String,nullable = False)
password = db.Column(db.String,nullable = False)
posts = db.relationship(Post,backref =author,lazy =dynamic)

def __init __(self,name,email,password):
self.name = name
self.email = email
self.password = bcrypt.generate_password_hash(password)
$ b $ def __repr __(self):
return' < User {}>'format(self.name)

views.py

  @ app.route(/ login,methods = [GET,POST])
def login ):
form = LoginForm()
if form.validate_on_submit():$ b $ user = User.query.filter(User.name == form.username.data).first()
如果用户和bcrypt.check_password_hash(user.password,form.password.data):
flash(您刚刚登录!)
login_user(用户)
返回重定向(url_for (home))
else:
flash(bad username or password)
return render_template(login.html,form = form)

forms.py

  class LoginForm (Form):
username = StringField('username',validators = [DataRequired()])
password = PasswordField('password',validators = [DataRequired()])
< code $ <$ $ p

解决方案

基本上你想在hash之前编码你的数据:password.encode(' UTF-8' )。如果它是unicode,它可能会引发错误。
也看看这里: https://github.com/maxcountryman/flask -bcrypt / issues / 9


I was finishing up a simple user login with Flask and flask-Bcrypt. However, when trying to login with a user that is stored in my database, I keep getting this error

ValueError: Invalid salt

models.py

class User(db.Model):

    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    email = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)
    posts = db.relationship("Post", backref="author", lazy="dynamic")

    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = bcrypt.generate_password_hash(password)

    def __repr__(self):
        return '<User {}>'.format(self.name)

views.py

@app.route("/login", methods=["GET", "POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter(User.name == form.username.data).first()
        if user and bcrypt.check_password_hash(user.password, form.password.data):
            flash("you were just logged in!")
            login_user(user)
            return redirect(url_for("home"))
        else:
            flash("bad username or password")
    return render_template("login.html", form=form)

forms.py

class LoginForm(Form):
    username = StringField('username', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired()])

解决方案

Basically you would like to encode your data before the hash: password.encode('utf-8'). If it comes as unicode it may raise errors. Have a look here also: https://github.com/maxcountryman/flask-bcrypt/issues/9

这篇关于flask-bcrypt - ValueError:盐无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆