title: werkzeug module not matching hashed password
body: <p>Im currently following along w a video trying to build this login system for a site, but each time I call the werkzeug function to check the hash of the password against the one used to sign up, it returns invalid password. What am I doing wrong to make the hashes end up different even though I'm entering the same password as I did to sign up?</p>
  <pre><code>from flask import Blueprint, render_template, request, flash, redirect, url_for
  from .models import User
  from werkzeug.security import generate_password_hash, check_password_hash
  from . import db
  from flask_login import login_user, login_required, logout_user, current_user
  
  
  auth = Blueprint('auth', __name__)
  
  @auth.route('/sign-up', methods=['GET', 'POST'])
  def sign_up():
      if request.method == 'POST':
          email = request.form.get('email')
          first_name = request.form.get('firstName')
          password1 = request.form.get('password1')
          password2 = request.form.get('password2')
  
          user = User.query.filter_by(email=email).first()
          if user:
              flash('Email already exists.', category='error')
          elif len(email) &lt; 4:
              flash('Email must be greater than 3 characters.', category='error')
          elif len(first_name) &lt; 2:
              flash('First name must be greater than 1 character.', category='error')
          elif password1 != password2:
              flash('Passwords don\'t match.', category='error')
          elif len(password1) &lt; 7:
              flash('Password must be at least 7 characters.', category='error')
          else:
              new_user = User(email=email, first_name=first_name, password=generate_password_hash(password1, method='sha256',))
              db.session.add(new_user)
              db.session.commit()
              flash('Account created!', category='success')
              return redirect(url_for('views.home'))
      return render_template(&quot;sign_up.html&quot;)
  
  @auth.route('/login', methods=['GET', 'POST'])
  def login():
      if request.method == 'POST':
          email = request.form.get('email')
          password = request.form.get('password')
          user = User.query.filter_by(email=email).first()
          if user:
              if check_password_hash(user.password, password):
                  flash('Logged in successfully!', category='success')
                  login_user(user, remember=True)
                  return redirect(url_for('views.home'))
              else:
                  flash('Incorrect password, try again.', category='error')
          else:
              flash('Email does not exist.', category='error')
  
      return render_template(&quot;login.html&quot;, user=current_user)
  
  
  @auth.route('/logout')
  @login_required
  def logout():
      logout_user()
      return redirect(url_for('auth.login'))
  </code></pre>