|
5 | 5 | from .. import db
|
6 | 6 | from ..models import User
|
7 | 7 | from ..email import send_email
|
8 |
| -from .forms import LoginForm, RegistrationForm, ChangePasswordForm |
| 8 | +from .forms import LoginForm, RegistrationForm, ChangePasswordForm,\ |
| 9 | + PasswordResetRequestForm, PasswordResetForm |
9 | 10 |
|
10 | 11 |
|
11 | 12 | @auth.before_app_request
|
@@ -102,3 +103,36 @@ def change_password():
|
102 | 103 | else:
|
103 | 104 | flash('Invalid password.')
|
104 | 105 | return render_template("auth/change_password.html", form=form)
|
| 106 | + |
| 107 | + |
| 108 | +@auth.route('/reset', methods=['GET', 'POST']) |
| 109 | +def password_reset_request(): |
| 110 | + if not current_user.is_anonymous: |
| 111 | + return redirect(url_for('main.index')) |
| 112 | + form = PasswordResetRequestForm() |
| 113 | + if form.validate_on_submit(): |
| 114 | + user = User.query.filter_by(email=form.email.data.lower()).first() |
| 115 | + if user: |
| 116 | + token = user.generate_reset_token() |
| 117 | + send_email(user.email, 'Reset Your Password', |
| 118 | + 'auth/email/reset_password', |
| 119 | + user=user, token=token) |
| 120 | + flash('An email with instructions to reset your password has been ' |
| 121 | + 'sent to you.') |
| 122 | + return redirect(url_for('auth.login')) |
| 123 | + return render_template('auth/reset_password.html', form=form) |
| 124 | + |
| 125 | + |
| 126 | +@auth.route('/reset/<token>', methods=['GET', 'POST']) |
| 127 | +def password_reset(token): |
| 128 | + if not current_user.is_anonymous: |
| 129 | + return redirect(url_for('main.index')) |
| 130 | + form = PasswordResetForm() |
| 131 | + if form.validate_on_submit(): |
| 132 | + if User.reset_password(token, form.password.data): |
| 133 | + db.session.commit() |
| 134 | + flash('Your password has been updated.') |
| 135 | + return redirect(url_for('auth.login')) |
| 136 | + else: |
| 137 | + return redirect(url_for('main.index')) |
| 138 | + return render_template('auth/reset_password.html', form=form) |
0 commit comments