当前位置: 首页 > 面试题库 >

flask-bcrypt - ValueError: Invalid salt

柳宏深
2023-03-14
问题内容

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

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)

表格

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

问题答案:

我的问题类似于@tomClark所描述的

我将Postgres用作DDBB,而他的驱动程序或DDBB系统始终对已编码的string进行编码。第二个编码过程将创建一个无效的哈希,如下所示:

'\\x24326224313224483352757749766438764134333757365142464f4f4f464959664d66673575‌​467873754e466250716f3166375753696955556b2e36'

正确的哈希看起来像这样:

$2b$12$Wh/sgyuhro5ofqy2.5znc.35AjHwTTZzabz.uUOya8ChDpdwvROnm

为了解决这个问题,我先将哈希解码为utf8,然后再将其保存到DDBB。

示例代码:

def set_password(self, pw):
    pwhash = bcrypt.hashpw(pw.encode('utf8'), bcrypt.gensalt())
    self.password_hash = pwhash.decode('utf8') # decode the hash to prevent is encoded twice


 类似资料:
  • Bcrypt 是一个跨平台的文件加密工具。

  • 这是一个新的烧瓶项目,requirement.txt: 烧瓶 烧瓶_pymongo 烧瓶_pymongo 烧瓶盖 比重 烧瓶JWT扩展 b加密 当我运行或时,我有什么? pip安装bcrypt 请问有什么解决办法吗?

  • 问题内容: 我收到错误,无法在Node.js应用程序中找到模块“ bcrypt” 我尝试使用 npm install bcrypt 安装它, 但仍然出现问题。 错误信息: 问题答案: 使用命令无法为我解决问题。 我尝试了以下命令,但问题解决了。

  • 我正在尝试使用Sinatra和BCrypt实现一种看似非常简单的身份验证方法,但显然我遗漏了一些东西... 用户会预先分配一个临时密码,该密码以明文形式存储在DB中。 我根据临时口令进行身份验证,然后创建salt和password_hash,并将它们作为字符串写入db(本例中为mongo)。 为了进行身份验证,我从db和用户口令中获取salt进行比较。 bcrypt::Engine.hash_se

  • 我得到错误,在nodejs应用程序中找不到模块'bcrypt' 我已经尝试使用npm install bcrypt安装它,但仍然得到问题。 错误消息:

  • 问题内容: 大约几个小时前,我在Stack Overflow上询问了有关如何将char []转换为MD5哈希的方法。 Neil Smithline建议我使用BCrypt,但不能将其与char []一起使用。 我使用char []来存储从登录表单中检索到的密码的原因是因为仅支持char []。 当前,我正在尝试使用上面的代码生成哈希,但是由于变量passwordCars的类型为char [],因此不