增加应用授权登录与应用管理
This commit is contained in:
parent
51950eca7a
commit
de9fe42539
|
@ -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)
|
||||
|
||||
# 用户授权登录
|
||||
|
|
|
@ -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)):
|
||||
# 用户是否存在
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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):
|
||||
|
|
4
main.py
4
main.py
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue