Browse Source

feat: 修改密码

SongZihuan 2 years ago
parent
commit
fdd6c12863
3 changed files with 54 additions and 1 deletions
  1. 32 0
      app/auth.py
  2. 18 0
      templates/auth/change_passwd.html
  3. 4 1
      templates/auth/yours.html

+ 32 - 0
app/auth.py

@@ -72,6 +72,18 @@ class RegisterForm(EmailPasswd):
             raise ValidationError("邮箱已被注册")
 
 
+class ChangePasswdForm(AuthField):
+    old_passwd = AuthField.passwd_field("旧密码", "用户原密码")
+    passwd = AuthField.passwd_field("新密码", "用户新密码")
+    passwd_again = AuthField.passwd_again_field("新密码", "用户新密码")
+    submit = SubmitField("修改密码")
+
+    def validate_passwd(self, field):
+        """ 检验新旧密码是否相同 """
+        if field.data == self.old_passwd.data:
+            raise ValidationError("新旧密码不能相同")
+
+
 def __load_login_page(passwd_login_form=None, email_login_form=None, register_form=None,
                       on_passwd_login=True, on_email_login=False, on_register=False):
     if not passwd_login_form:
@@ -214,6 +226,26 @@ def email_login_confirm_page():
     return redirect(url_for("base.index_page"))
 
 
+@auth.route('/set/passwd', methods=['GET', 'POST'])
+@login_required
+def change_passwd_page():
+    form = ChangePasswdForm()
+    if form.validate_on_submit():
+        if not current_user.check_passwd(form.old_passwd.data):
+            Logger.print_user_opt_error_log(f"change passwd")
+            flash("旧密码错误")
+        else:
+            current_user.passwd = form.passwd.data
+            db.session.commit()
+
+            Logger.print_user_opt_success_log(f"change passwd")
+            flash("密码修改成功")
+            logout_user()
+            return redirect(url_for("auth.passwd_login_page"))
+        return redirect(url_for("auth.change_passwd_page"))
+    Logger.print_load_page_log("user change passwd")
+    return render_template("auth/change_passwd.html", form=form)
+
 
 @auth.route('/logout')
 @login_required

+ 18 - 0
templates/auth/change_passwd.html

@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+
+{% block title %} 用户 {% endblock %}
+
+{% block content %}
+    <div class="container">
+        <form method="post" action="{{ url_for("auth.change_passwd_page") }}" class="was-validated">
+            {{ form.hidden_tag() }}
+            {{ render_field(form.old_passwd) }}
+            {{ render_field(form.passwd) }}
+            {{ render_field(form.passwd_again) }}
+
+            <div class="text-end">
+                {{ form.submit(class='btn btn-success me-2') }}
+            </div>
+        </form>
+    </div>
+{% endblock %}

+ 4 - 1
templates/auth/yours.html

@@ -14,7 +14,10 @@
         </ul>
 
         <div class="text-end">
-            <a class="btn btn-outline-danger" href="{{ url_for("auth.logout_page") }}"> 退出登录 </a>
+            <div class="btn-group">
+                <a class="btn btn-outline-danger" href="{{ url_for("auth.change_passwd_page") }}"> 修改密码 </a>
+                <a class="btn btn-outline-danger" href="{{ url_for("auth.logout_page") }}"> 退出登录 </a>
+            </div>
         </div>
 
     </div>