增加应用授权登录与应用管理
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)):
|
def get_user_base_info(payload=Depends(app_auth_token_depend)):
|
||||||
return AppSchemas.UserBaseInfo(**payload)
|
return AppSchemas.UserBaseInfo(**payload)
|
||||||
|
|
||||||
|
# 用户授权登录
|
||||||
|
|
|
@ -4,8 +4,9 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from Crud.UserCrud import get_user_by_email, create_user, rest_user_password
|
from Crud.UserCrud import get_user_by_email, create_user, rest_user_password
|
||||||
|
from Crud import AppCrud
|
||||||
from Schemas import UserSchemas
|
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.EncyptUtil import get_encrypt_password
|
||||||
from Utils.SqlAlchemyUtils import get_db
|
from Utils.SqlAlchemyUtils import get_db
|
||||||
from Utils.VerifyCodeUtils import EmailVerifyCode, ImageCaptchaVerify, EmailVerifyType
|
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')
|
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="注册")
|
@router.post("/register", summary="注册")
|
||||||
def register(body: UserSchemas.RegisterReqBody, db: Session = Depends(get_db)):
|
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
|
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)):
|
def avatar_upload(file: UploadFile = File(...), token_data: TokenData = Depends(token_data_depend)):
|
||||||
if file.content_type not in ['image/png', 'image/jpeg']:
|
if file.content_type not in ['image/png', 'image/jpeg']:
|
||||||
raise Exception('图片格式应为png和jpg')
|
raise Exception('图片格式应为png和jpg')
|
||||||
|
|
|
@ -19,3 +19,24 @@ class UserBaseInfo(BaseModel):
|
||||||
department: Union[str, None]
|
department: Union[str, None]
|
||||||
post: Union[str, None]
|
post: Union[str, None]
|
||||||
auth_data: 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位"
|
password: passwordRegex = "包含大小写字母和数字,长度8-16位"
|
||||||
captcha_id: str
|
captcha_id: str
|
||||||
captcha_code: str
|
captcha_code: str
|
||||||
|
app_id: Union[str, None] #
|
||||||
|
|
||||||
|
|
||||||
class EmailSendReqBody(BaseModel):
|
class EmailSendReqBody(BaseModel):
|
||||||
|
@ -35,6 +36,7 @@ class UserInfo(BaseModel):
|
||||||
class LoginResBody(UserInfo):
|
class LoginResBody(UserInfo):
|
||||||
access_token: str
|
access_token: str
|
||||||
token_type: str
|
token_type: str
|
||||||
|
app_id: Union[str, None] #
|
||||||
|
|
||||||
|
|
||||||
class RegisterReqBody(BaseModel):
|
class RegisterReqBody(BaseModel):
|
||||||
|
|
4
main.py
4
main.py
|
@ -1,7 +1,8 @@
|
||||||
import uvicorn
|
import uvicorn
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
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.ConfigUtils import init_common_config
|
||||||
from Utils.RedisUtils import init_redis_pool
|
from Utils.RedisUtils import init_redis_pool
|
||||||
from Utils.SqlAlchemyUtils import Base, init_database
|
from Utils.SqlAlchemyUtils import Base, init_database
|
||||||
|
@ -31,5 +32,6 @@ app.include_router(DepartmentRouter.router)
|
||||||
app.include_router(PostRouter.router)
|
app.include_router(PostRouter.router)
|
||||||
app.include_router(AppRouter.router)
|
app.include_router(AppRouter.router)
|
||||||
app.include_router(UserManageRouter.router)
|
app.include_router(UserManageRouter.router)
|
||||||
|
app.include_router(AppManageRouter.router)
|
||||||
|
|
||||||
uvicorn.run(app=app, port=8001)
|
uvicorn.run(app=app, port=8001)
|
||||||
|
|
Loading…
Reference in New Issue