增加应用授权登录与应用管理

This commit is contained in:
wcq 2023-02-08 16:26:25 +08:00
parent 51950eca7a
commit de9fe42539
6 changed files with 59 additions and 4 deletions

View File

@ -15,7 +15,8 @@ router = APIRouter(
# 获取用户基本信息
@router.post("/get_user_base_info", response_model=AppSchemas.UserBaseInfo)
@router.post("/get_user_base_info", response_model=AppSchemas.UserBaseInfo,summary="获取用户基本信息")
def get_user_base_info(payload=Depends(app_auth_token_depend)):
return AppSchemas.UserBaseInfo(**payload)
# 用户授权登录

View File

@ -4,8 +4,9 @@ from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from Crud.UserCrud import get_user_by_email, create_user, rest_user_password
from Crud import AppCrud
from Schemas import UserSchemas
from Utils.AuthUtils import Token, token_data_depend
from Utils.AuthUtils import Token, token_data_depend, create_token
from Utils.EncyptUtil import get_encrypt_password
from Utils.SqlAlchemyUtils import get_db
from Utils.VerifyCodeUtils import EmailVerifyCode, ImageCaptchaVerify, EmailVerifyType
@ -55,6 +56,34 @@ def login(body: UserSchemas.LoginReqBody, db: Session = Depends(get_db)):
return UserSchemas.LoginResBody(**user_info, access_token=token, token_type='bearer')
@router.post("/login_to_app", summary="授权应用登录", response_model=UserSchemas.LoginResBody)
def login(body: UserSchemas.LoginReqBody, db: Session = Depends(get_db)):
if not body.app_id:
raise HTTPException(status_code=202, detail="未传入应用ID")
app = AppCrud.get_app_by_id(body.app_id)
if not app:
raise HTTPException(status_code=202, detail="应用信息错误")
# 图片验证码校验
check_res = ImageCaptchaVerify.check_code(body.captcha_id, body.captcha_code)
if not check_res:
raise HTTPException(status_code=202, detail="验证码过期或错误")
# 密码验证
# 是否在前端传输时进行一次base64处理
user_obj = get_user_by_email(db, body.email)
if user_obj is None:
raise HTTPException(status_code=404, detail="用户未注册")
encrypt_password = get_encrypt_password(body.password)
if encrypt_password != user_obj.password:
raise HTTPException(status_code=202, detail="密码错误")
if user_obj.disable:
raise HTTPException(status_code=202, detail="该账户被禁用")
user_info = user_obj.as_info()
# 生成&加密token信息
token = create_token({"id": user_obj.id}, app.token_key)
return UserSchemas.LoginResBody(**user_info, access_token=token, token_type='bearer', app_id=app.id)
@router.post("/register", summary="注册")
def register(body: UserSchemas.RegisterReqBody, db: Session = Depends(get_db)):
# 用户是否存在

View File

@ -28,7 +28,7 @@ def get_user_info(token_data: TokenData = Depends(token_data_depend), db: Sessio
return user_info
@router.post('/avatar_upload')
@router.post('/avatar_upload',summary="用户头像上传")
def avatar_upload(file: UploadFile = File(...), token_data: TokenData = Depends(token_data_depend)):
if file.content_type not in ['image/png', 'image/jpeg']:
raise Exception('图片格式应为png和jpg')

View File

@ -19,3 +19,24 @@ class UserBaseInfo(BaseModel):
department: Union[str, None]
post: Union[str, None]
auth_data: Union[str, None]
from typing import List
from pydantic import BaseModel
class AppAddInfo(BaseModel):
name: str
secret_key: str
class AppInfo(BaseModel):
id: str
name: str
secret_key: str
token_key: str
class AppInfoList(BaseModel):
app_info_list: List[AppInfo]

View File

@ -15,6 +15,7 @@ class LoginReqBody(BaseModel):
password: passwordRegex = "包含大小写字母和数字长度8-16位"
captcha_id: str
captcha_code: str
app_id: Union[str, None] #
class EmailSendReqBody(BaseModel):
@ -35,6 +36,7 @@ class UserInfo(BaseModel):
class LoginResBody(UserInfo):
access_token: str
token_type: str
app_id: Union[str, None] #
class RegisterReqBody(BaseModel):

View File

@ -1,7 +1,8 @@
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from Router import UserRouter, UserRegisterRouter, DepartmentRouter, PostRouter,AppRouter,UserManageRouter
from Router import UserRouter, UserRegisterRouter, DepartmentRouter, PostRouter, AppRouter, UserManageRouter, \
AppManageRouter
from Utils.ConfigUtils import init_common_config
from Utils.RedisUtils import init_redis_pool
from Utils.SqlAlchemyUtils import Base, init_database
@ -31,5 +32,6 @@ app.include_router(DepartmentRouter.router)
app.include_router(PostRouter.router)
app.include_router(AppRouter.router)
app.include_router(UserManageRouter.router)
app.include_router(AppManageRouter.router)
uvicorn.run(app=app, port=8001)