Flask 安全更新密码不起作用
Flask Security updating password not working
我正在尝试使用 flask-Security 来更改密码。基本上,不会抛出任何错误,但我数据库中的哈希值不会更新。创建初始密码时,一切正常。
但是,当我尝试使用 update.py
中的代码进行更新时,密码没有更新。我很欣赏你的洞察力。谢谢。
update.py
buyer = Buyers.query.filter_by(id=buyer_id).first()
buyer.password = generate_password_hash(form.password.data)
db.session.commit()
flash('Password has been updated')
models.py
class Buyers(db.Model, UserMixin):
__tablename__ = 'buyers'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True, nullable=False)
firstname = db.Column(db.String(64), index=True, nullable=False)
lastname = db.Column(db.String(64), index=True, nullable=False)
company = db.Column(db.Integer, db.ForeignKey('company.id'))
password_hash = db.Column(db.String(128))
def __init__(
self, email, firstname, lastname, company, password
):
self.email = email
self.firstname = firstname
self.lastname = lastname
self.company = company
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
不完全确定您要完成什么 - 但代码片段中的用户模型带有字段 password_hash - 而不是密码。 Flask-Security 需要某些定义的模型名称才能工作。
不确定你从哪里得到 check_password_hash() 和 generate_password_hash()....
Flask-Security更新密码的方式是:
user.password = hash_password(password)
_datastore.put(user)
_datastore.commit()
哦 - 我假设你是 Flask-Security-Too(这是一个维护的叉子)......
我正在尝试使用 flask-Security 来更改密码。基本上,不会抛出任何错误,但我数据库中的哈希值不会更新。创建初始密码时,一切正常。
但是,当我尝试使用 update.py
中的代码进行更新时,密码没有更新。我很欣赏你的洞察力。谢谢。
update.py
buyer = Buyers.query.filter_by(id=buyer_id).first()
buyer.password = generate_password_hash(form.password.data)
db.session.commit()
flash('Password has been updated')
models.py
class Buyers(db.Model, UserMixin):
__tablename__ = 'buyers'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True, nullable=False)
firstname = db.Column(db.String(64), index=True, nullable=False)
lastname = db.Column(db.String(64), index=True, nullable=False)
company = db.Column(db.Integer, db.ForeignKey('company.id'))
password_hash = db.Column(db.String(128))
def __init__(
self, email, firstname, lastname, company, password
):
self.email = email
self.firstname = firstname
self.lastname = lastname
self.company = company
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
不完全确定您要完成什么 - 但代码片段中的用户模型带有字段 password_hash - 而不是密码。 Flask-Security 需要某些定义的模型名称才能工作。 不确定你从哪里得到 check_password_hash() 和 generate_password_hash()....
Flask-Security更新密码的方式是:
user.password = hash_password(password)
_datastore.put(user)
_datastore.commit()
哦 - 我假设你是 Flask-Security-Too(这是一个维护的叉子)......