urban-investment-research/Mods/User/Router.py

92 lines
4.2 KiB
Python
Raw Normal View History

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from Utils.EmailUtils import email_check
2023-03-20 14:11:37 +08:00
from Utils.VerifyCodeUtils import EmailVerifyType, PhoneVerifyType
from . import Schemas
from . import Crud
2023-03-20 14:11:37 +08:00
from Context.common import common_db, email_code_verify, auth_util, phone_verify_code
router = APIRouter(prefix="/api/user")
@router.post('/login_by_email', summary='邮箱登录', tags=['用户接口'], response_model=Schemas.LoginByEmailRes)
def login_by_email(req: Schemas.LoginByEmailReq,
db: Session = Depends(common_db.get_db)):
checked = email_code_verify.check_code(req.email, req.code, EmailVerifyType.login)
if not checked:
raise HTTPException(detail="邮箱验证码错误", status_code=303)
user = Crud.get_user_info(db, req.email)
if not user:
user = Crud.create_user(db, req.email)
auth_data = Crud.get_user_auth(db, req.email)
user_data = user.to_dict()
user_data["auth_data"] = auth_data
token_data = auth_util.tokenDataModel(**user_data)
token = auth_util.create_token(token_data)
return Schemas.LoginByEmailRes(token=token)
@router.post("/get_email_verify_code", tags=["用户接口"], summary="获取邮箱验证码")
def get_email_verify_code(body: Schemas.GetEmailVerifyCodeReq):
try:
email = body.email
if not email_check(email):
raise HTTPException(detail="错误的邮箱格式", status_code=403)
email_code_verify.send_code(email, EmailVerifyType.login)
except Exception as e:
print(e)
raise HTTPException(detail="邮箱验证码发送失败", status_code=403)
return {'state': 1, "msg": "邮箱验证码已发送至邮箱,请查看"}
@router.post("/refresh_token", summary="重新获取token", tags=['用户接口'], response_model=Schemas.RefreshTokenRes)
def refresh_token(token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend),
db: Session = Depends(common_db.get_db)):
user_data = Crud.get_full_user_info(db, token_data.email)
token_data = auth_util.tokenDataModel(**user_data)
token = auth_util.create_token(token_data)
return {'token': token}
@router.post('/get_user_info', summary='获取用户信息', tags=["用户接口"], response_model=Schemas.GetUserInfoRes)
def get_user_info(token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend),
db: Session = Depends(common_db.get_db)):
user_data = Crud.get_full_user_info(db, token_data.email)
if not user_data:
raise HTTPException(detail="用户未注册", status_code=403)
if not user_data['email']:
raise HTTPException(detail="用户未绑定邮箱", status_code=403)
return Schemas.GetUserInfoRes(**user_data)
2023-03-20 14:11:37 +08:00
@router.post("/get_phone_verify_code", tags=["用户接口"], summary="获取短信验证码")
def get_phone_verify_code(body: Schemas.GetPhoneVerifyCodeReq, db=Depends(common_db.get_db)):
phone = body.phone
user = Crud.get_user_info_by_phone(db, phone)
if not user:
raise HTTPException(detail="手机号未录入系统", status_code=303)
try:
phone_verify_code.send_code(phone, PhoneVerifyType.login)
except Exception as e:
print(e)
raise HTTPException(detail="验证码发送失败", status_code=403)
return {"msg": "验证码已发送至手机,请查看", "state": 1}
@router.post('/login_by_phone', tags=["用户接口"], summary='手机号登录')
def login_by_phone(req: Schemas.LoginByPhoneReq,
db: Session = Depends(common_db.get_db)):
phone = req.phone.replace(" ", "")
checked = phone_verify_code.check_code(phone, req.code, PhoneVerifyType.login)
if not checked:
raise HTTPException(detail="验证码错误", status_code=303)
2023-03-21 16:28:32 +08:00
user_data = Crud.get_user_info_by_phone(db, phone)
if not user_data:
2023-03-20 14:11:37 +08:00
raise HTTPException(detail="手机号未录入系统", status_code=303)
2023-03-21 16:28:32 +08:00
auth_data = Crud.get_user_auth(db, user_data['email'])
2023-03-20 14:11:37 +08:00
user_data["auth_data"] = auth_data
token_data = auth_util.tokenDataModel(**user_data).dict()
token = auth_util.create_token(token_data)
return {'msg': "成功", 'state': 1, 'data': {'token': token}}