title: flask-bcrypt - ValueError: Invalid salt
body: <p>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</p>
  
  <pre><code>ValueError: Invalid salt
  </code></pre>
  
  <p>models.py</p>
  
  <pre><code>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 '&lt;User {}&gt;'.format(self.name)
  </code></pre>
  
  <p>views.py</p>
  
  <pre><code>@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)
  </code></pre>
  
  <p>forms.py</p>
  
  <pre><code>class LoginForm(Form):
      username = StringField('username', validators=[DataRequired()])
      password = PasswordField('password', validators=[DataRequired()])
  </code></pre>