2016-09-09 8 views
1

私のFlaskアプリケーションのユーザーは、新しい電子メールとその現在のパスワードを入力することで電子メールを変更できます。しかし、私がUser.query.filter_by(password=form.password.data)で入力したパスワードでユーザーを検索しようとすると、ユーザーは決して見つけられません。パスワードを確認しながらメールを変更できるように、ユーザーに問い合わせるにはどうすればよいですか?ハッシュされたパスワードを格納するパスワードでSQLAlchemyのユーザーモデルを照会することはありません

@app.route('/changeemail', methods=['GET', 'POST']) 
def change_email(): 
    form = ChangeEmailForm(request.form) 

    if form.validate_on_submit(): 
     user = User.query.filter_by(password=form.password.data).first() 

     if user and bcrypt.check_password_hash(user.password,form.password.data): 
      user.email = form.email.data 
      db.session.commit() 
      return redirect(url_for("user.confirmed")) 

    return render_template('user/changeemail.html',form=form) 

class ChangeEmailForm(Form): 
    email = TextField('email', validators=[DataRequired()]) 
    password = PasswordField('password', validators=[DataRequired()]) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String, unique=True, nullable=False) 
    password = db.Column(db.String, nullable=False) 

答えて

4

全体のポイントはあなた決してストア生のパスワードようです。編集しているユーザーを照会し、パスワードを確認します。

@app.route('/<int:id>/change-email', methods=['GET', 'POST']) 
def change_email(id): 
    user = User.query.get_or_404(id) 

    if user.check_password(form.password.data): 
    ... 
+0

ありがとうございます!はい。私はちょうどあなたもIDで照会することができることに気づいた。私はオプションの外だったと思った! – Benji

関連する問題