小编典典

密码未在 MYSQL 中加密

all

我目前正在尝试使用 bcrypt 从我的种子中加密/散列我的密码并将它们存储在 MYSQL 中,但它一直给我相同的密码。我正在使用python。任何帮助,将不胜感激!

User.py

from app.db import Base
from sqlalchemy.orm import validates
from sqlalchemy import Column, Integer, String
salt = bcrypt.gensalt()


class User(Base):
  __tablename__ = 'users'
  id = Column(Integer, primary_key=True)
  username = Column(String(50), nullable=False)
  email = Column(String(50), nullable=False, unique=True)
  password = Column(String(200), nullable=False)

  @validates('email')
  def validate_email(self, key, email):
    # make sure email address contains @ character
    assert '@' in email

    return email


@validates('password')
def validate_password(self, key, password):
  assert len(password) > 4

  # encrypt password
  return bcrypt.hashpw(password.encode('utf-8'), salt)

seeds.py

from app.models import User
from app.db import Session, Base, engine

# drop and rebuild tables
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

db = Session()

# insert users
db.add_all([
  User(username='alesmonde0', email='nwestnedge0@cbc.ca', password='password123'),
  User(username='jwilloughway1', email='rmebes1@sogou.com', password='password123'),
  User(username='iboddam2', email='cstoneman2@last.fm', password='password123'),
  User(username='dstanmer3', email='ihellier3@goo.ne.jp', password='password123'),
  User(username='djiri4', email='gmidgley4@weather.com', password='password123')
])

db.commit()

db.close()

阅读 57

收藏
2022-07-07

共1个答案

小编典典

假如说:

  • 您已完全复制原始文件中的代码
  • 并且“不断给我相同的密码”意味着在数据库中保存的是开放文本密码,而不是来自验证器的哈希

如果以上都正确,则问题出在标识上,即“validate_password”方法根本不在 User 类中。尝试正确识别它,它应该触发和散列密码。

2022-07-07