1. 修复(kinit-admin):页面缓存问题修复 2. 更新(kinit-api,kinit-admin):菜单管理新增是否缓存字段 3. 更新(kinit-admin):将缓存默认存储在localStorage中 4. 更新(kinit-api):将python-jose库更换为pyjwt库 5. 优化(kinit-admin,kinit-uni):退出登录方法优化 6. 优化(kinit-admin,kinit-uni):response拦截优化 7. 新增(kinit-api,kinit-admin,kinit-uni):jwt到期时间缩短,加入刷新token功能 8. (kinit-uni)切换到 vscode 开发 uniapp 项目
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
#!/usr/bin/python
|
||
# -*- coding: utf-8 -*-
|
||
# @version : 1.0
|
||
# @Creaet Time : 2022/8/8 11:02
|
||
# @File : auth_util.py
|
||
# @IDE : PyCharm
|
||
# @desc : 简要说明
|
||
|
||
from datetime import datetime, timedelta
|
||
from fastapi import Request
|
||
from application import settings
|
||
import jwt
|
||
from apps.vadmin.auth import models
|
||
from .validation import LoginValidation, LoginForm, LoginResult
|
||
from utils.aliyun_sms import AliyunSMS
|
||
|
||
|
||
class LoginManage:
|
||
"""
|
||
登录认证工具
|
||
"""
|
||
|
||
@LoginValidation
|
||
async def password_login(self, data: LoginForm, user: models.VadminUser, **kwargs) -> LoginResult:
|
||
"""
|
||
验证用户密码
|
||
"""
|
||
result = models.VadminUser.verify_password(data.password, user.password)
|
||
if result:
|
||
return LoginResult(status=True, msg="验证成功")
|
||
return LoginResult(status=False, msg="手机号或密码错误")
|
||
|
||
@LoginValidation
|
||
async def sms_login(self, data: LoginForm, request: Request, **kwargs) -> LoginResult:
|
||
"""
|
||
验证用户短信验证码
|
||
"""
|
||
rd = request.app.state.redis
|
||
sms = AliyunSMS(rd, data.telephone)
|
||
result = await sms.check_sms_code(data.password)
|
||
if result:
|
||
return LoginResult(status=True, msg="验证成功")
|
||
return LoginResult(status=False, msg="验证码错误")
|
||
|
||
@staticmethod
|
||
def create_token(payload: dict, expires: timedelta = None):
|
||
"""
|
||
创建一个生成新的访问令牌的工具函数。
|
||
|
||
pyjwt:https://github.com/jpadilla/pyjwt/blob/master/docs/usage.rst
|
||
jwt 博客:https://geek-docs.com/python/python-tutorial/j_python-jwt.html
|
||
|
||
#TODO 传入的时间为UTC时间datetime.datetime类型,但是在解码时获取到的是本机时间的时间戳
|
||
"""
|
||
if expires:
|
||
expire = datetime.utcnow() + expires
|
||
else:
|
||
expire = datetime.utcnow() + timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
|
||
payload.update({"exp": expire})
|
||
encoded_jwt = jwt.encode(payload, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
|
||
return encoded_jwt
|