James Iter 9 лет назад
Родитель
Сommit
31b72e4bd7

+ 36 - 2
api/user.py

@@ -39,12 +39,12 @@ user_base = Base(the_class=User, the_blueprint=blueprint, the_blueprints=bluepri
 @Utils.dumps2response
 def r_sign_in():
 
-    user = User()
-
     args_rules = [
         Rules.LOGIN_NAME.value,
         Rules.PASSWORD.value
     ]
+
+    user = User()
     user.login_name = request.json.get('login_name')
     user.password = request.json.get('password')
 
@@ -75,3 +75,37 @@ def r_sign_out():
         session.pop(key=key)
 
 
+@Utils.dumps2response
+def r_change_password():
+
+    args_rules = [
+        Rules.ID.value
+    ]
+
+    user = User()
+    user.id = g.token.get('uid', 0).__str__()
+
+    try:
+        ji.Check.previewing(args_rules, user.__dict__)
+        user.get()
+
+        old_password = request.json.get('old_password', '')
+
+        if not ji.Security.ji_pbkdf2_check(password=old_password, password_hash=user.password):
+            ret = dict()
+            ret['state'] = ji.Common.exchange_state(40101)
+            ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], u': 鉴权失败'])
+            raise ji.PreviewingError(json.dumps(ret, ensure_ascii=False))
+
+        args_rules = [
+            Rules.PASSWORD.value
+        ]
+
+        user.password = request.json.get('password')
+
+        ji.Check.previewing(args_rules, user.__dict__)
+        user.password = ji.Security.ji_pbkdf2(user.password)
+        user.update()
+    except ji.PreviewingError, e:
+        return json.loads(e.message)
+

+ 1 - 0
api_route_table.py

@@ -31,6 +31,7 @@ add_rule_api(config.blueprint, '', api_func='config.r_get', methods=['GET'])
 # 用户管理
 add_rule_api(user.blueprint, '/_sign_in', api_func='user.r_sign_in', methods=['POST'])
 add_rule_api(user.blueprint, '/_sign_out', api_func='user.r_sign_out', methods=['GET'])
+add_rule_api(user.blueprint, '/_change_password', api_func='user.r_change_password', methods=['POST'])
 
 # 系统启动作业配置操作
 add_rule_api(boot_job.blueprint, '', api_func='boot_job.r_create', methods=['POST'])

BIN
static/avatar/Burung-Pelatuk_144x144.png


BIN
static/avatar/Burung-Pelatuk_144x144@2x.png


+ 74 - 0
templates/change_password.html

@@ -0,0 +1,74 @@
+{% extends "layout.html" %}
+{% block head %}
+    {{ super() }}
+
+    <style type="text/css">
+
+        label>span {
+            color: deepskyblue;
+        }
+
+        .btn,
+        .form-group>div>div,
+        .form-control {
+            border-radius: 0;
+        }
+    </style>
+{% endblock head %}
+{% block content %}
+    <script>
+        $(document).ready(function() {
+            $("#change_password_form").delegate('#submit_button', 'click', function() {
+                $.ajax({
+                    url : '/api/user/_change_password',
+                    type : 'POST',
+                    contentType: "application/json; charset=utf-8",
+                    dataType: "json",
+                    data : JSON.stringify({old_password: $('#old_password').val(), password: $('#password').val()}),
+                    error : function(data, textStatus, xhr) {
+                        if (data.status === 401) {
+                            alter_warning('当前密码有误!');
+                        } else {
+                            alter_danger(data.responseText);
+                        }
+                    },
+                    success : function(data, textStatus, xhr) {
+                        alter_success('密码修改成功!');
+                        setTimeout(function() {
+                            window.location.href="/";
+                        }, 1000);
+                    }
+                });
+            });
+        });
+    </script>
+    <div class="panel">
+        <div class="panel-body">
+            <h3 class="title-hero" style="text-transform: unset;">
+                修改密码
+            </h3>
+            <div class="example-box-wrapper">
+                <form id="change_password_form" class="form-horizontal bordered-row">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">当前密码</label>
+                        <div class="col-sm-3">
+                            <input title="当前密码" class="form-control" id="old_password" name="old_password" type="password">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">新密码</label>
+                        <div class="col-sm-3">
+                            <input title="新密码" class="form-control" id="password" name="password" type="password">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label"></label>
+                        <div class="col-sm-3 pull-right">
+                            <button id="submit_button" type="button" class="btn btn-blue-alt" style="width: 180px; height: 40px; font-size: 16px;">确定</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+{% endblock content %}

+ 9 - 1
templates/layout.html

@@ -271,7 +271,7 @@
                             <i class="glyph-icon icon-angle-down"></i>
                         </a>
                         <div class="dropdown-menu float-left">
-                            <div class="box-sm">
+                            <div class="box-xs">
                                 <div class="login-box clearfix">
                                     <div class="user-img">
                                         <a href="#" title="" class="change-img">Change photo</a>
@@ -284,6 +284,14 @@
                                         </span>
                                     </div>
                                 </div>
+                                <div class="divider"></div>
+                                <ul class="reset-ul mrg5B" style="text-align: center;">
+                                    <li>
+                                        <a href="{{ url_for('v_misc.change_password') }}">
+                                            修改密码
+                                        </a>
+                                    </li>
+                                </ul>
                                 <div class="pad5A button-pane button-pane-alt text-center">
                                     <a href="#" class="btn display-block font-normal btn-danger" onclick="logout();">
                                         <i class="glyph-icon icon-power-off"></i>

+ 5 - 3
views/misc.py

@@ -2,9 +2,7 @@
 # -*- coding: utf-8 -*-
 
 
-import json
-from flask import Blueprint, render_template, request
-import requests
+from flask import Blueprint, render_template
 
 
 __author__ = 'James Iter'
@@ -23,3 +21,7 @@ blueprint = Blueprint(
 def login():
     return render_template('login.html')
 
+
+def change_password():
+    return render_template('change_password.html')
+

+ 2 - 1
views_route_table.py

@@ -15,7 +15,8 @@ __copyright__ = '(c) 2017 by James Iter.'
 add_rule_views(config.blueprint, '', views_func='config.show', methods=['GET'])
 add_rule_views(config.blueprint, '/create', views_func='config.create', methods=['GET', 'POST'])
 
-add_rule_views(misc.blueprint, 'login', views_func='misc.login', methods=['GET', 'POST'])
+add_rule_views(misc.blueprint, 'login', views_func='misc.login', methods=['GET'])
+add_rule_views(misc.blueprint, 'change_password', views_func='misc.change_password', methods=['GET'])
 
 add_rule_views(dashboard.blueprint, '', views_func='dashboard.show', methods=['GET'])