def inner(*args, **kwargs): if session.get('admin'): # 判断登入状态,如果session有admin则正常执行函数 return func(*args, **kwargs) else: # 从cookie中解密token,验证. token = request.cookies.get('token') if token: token = Token.string_decrypt(token) if token.verify_account(): # 验证token是否过期 session['admin'] = token.model.to_dict_( ) # 写入用户信息至session状态 return func() return redirect(url_for('admin_bp.login')) # 没有登入状态,又没有cookie.则转跳到登入页面
def login(): """登入请求视图""" if session.get('admin'): return redirect('/') else: token = request.cookies.get('token') if token: # 在未能获取cookie的情况下,直接返回登录页面 token = Token.string_decrypt( token=token) # 解密token, 得到account与deadline两项加密数据 token.verify_account( ) # 验证account与deadline验证成功,token.model将为->Admin数据模型 if token.model: # 证明验证完成 session['admin'] = token.model.to_dict_() # 写入session状态 return redirect('/') # 跳转主页 return render_template('login.html') # 返回登录页
def csp_change(): """修改二级密码""" token = Token.string_decrypt(token=request.form.get('token')) if not token.verify_salt(salt='__csp__'): # 验证token,也获取加盐后的account return 'token invalid' pwd = request.form.get('new_pwd') account = token.original_text.replace('__csp__', '') # 获得去盐后的账户 assert account == session['admin']['account'], '申请账户与当前账户一致,防止篡改他人二级密码' # 修改二级密码,提交事务 token.model.verification = common.my_md5(pwd) token.model.direct_update() return common.TransitionPage(title='二级密码变更成功', head='操作完成', seconds=10).transition()
def change_password(): """修改密码""" token = Token.string_decrypt( request.form.get('token')) # 解密token,如果token是伪造的,这一步就会触发异常 if token.verify_salt(salt='__cp__'): # 解密并且验证token token.model.password = request.form.get('new_pwd') # 修改密码 token.model.encryption_password().direct_update() # 加密并且保存操作 return common.TransitionPage( '密码修改完成,请重新登录', '操作完成', url=url_for('admin_bp.sign_out')).transition() else: return common.TransitionPage('请求时效已过期,请重新申请!', '操作失败', url=url_for('admin_bp.cp_application'), seconds=10).transition()