bug修改

This commit is contained in:
wcq 2023-03-07 12:03:06 +08:00
parent b8299dfeed
commit 5c6807cb95
7 changed files with 51 additions and 45 deletions

View File

@ -14,8 +14,8 @@ def marge_auth_data(auth_data_list):
return auth_data_str return auth_data_str
def get_user_auth(db: Session, user_id): def get_user_auth(db: Session, email):
user = db.query(User).filter_by(openid=user_id).first() user = db.query(User).filter_by(email=email).first()
user_auth_data_str = user.auth_data user_auth_data_str = user.auth_data
if not user.auth_data: if not user.auth_data:
if user.department: if user.department:

View File

@ -10,13 +10,13 @@ import json
from Utils.SqlAlchemyUtils import get_db_i from Utils.SqlAlchemyUtils import get_db_i
def get_user_info(db: Session, openid: str): def get_user_info(db: Session, email: str):
user = db.query(User).filter_by(openid=openid).first() user = db.query(User).filter_by(email=email).first()
return user return user
def get_full_user_info(db: Session, openid: str): def get_full_user_info(db: Session, email: str):
user = db.query(User).filter_by(openid=openid).first() user = db.query(User).filter_by(email=email).first()
if not user: if not user:
return None return None
departments = [] departments = []
@ -35,29 +35,29 @@ def get_full_user_info(db: Session, openid: str):
return user_data return user_data
def create_user(db: Session, openid: str): def create_user(db: Session, email: str):
user = User(openid=openid) user = User(email=email)
db.add(user) db.add(user)
db.commit() db.commit()
db.refresh(user) db.refresh(user)
return user return user
def change_user_info(db: Session, openid: str, user_info_change: UserSchemas.UserInfoChange): def change_user_info(db: Session, email: str, user_info_change: UserSchemas.UserInfoChange):
db.query(User).filter_by(openid=openid).update(user_info_change.dict()) db.query(User).filter_by(email=email).update(user_info_change.dict())
db.commit() db.commit()
return db.query(User).filter_by(openid=openid).first() return db.query(User).filter_by(email=email).first()
# 根据email从用户信息表内配置用户数据,相当于用户接入后的数据库操作 # 根据email从用户信息表内配置用户数据,相当于用户接入后的数据库操作
def update_user_info_from_email(db: Session, openid: str, email: str): def update_user_info_from_email(db: Session, email: str):
user_info = db.query(UserInfo).filter_by(email=email).first() user_info = db.query(UserInfo).filter_by(email=email).first()
if user_info: if user_info:
db.query(User).filter_by(openid=openid).update( db.query(User).filter_by(email=email).update(
{'email': email, "name": user_info.name, "post": user_info.post, {'email': email, "name": user_info.name, "post": user_info.post,
"department": user_info.department, 'registered': True}) "department": user_info.department, 'registered': True})
else: else:
db.query(User).filter_by(openid=openid).update( db.query(User).filter_by(email=email).update(
{'email': email, 'registered': True}) {'email': email, 'registered': True})
db.commit() db.commit()

View File

@ -9,7 +9,7 @@ class Daily(Base):
id = Column(Integer, primary_key=True, comment="日报ID") id = Column(Integer, primary_key=True, comment="日报ID")
type = Column(Enum(DailyTypeEnum, values_callable=lambda x: [e.value for e in x]), nullable=False) type = Column(Enum(DailyTypeEnum, values_callable=lambda x: [e.value for e in x]), nullable=False)
# fill_user = Column(String(128), comment="填报人openid") # fill_user = Column(String(128), comment="填报人openid")
fill_user = Column(String(128), ForeignKey('user.openid'), comment="填报人openid") fill_user = Column(String(128), ForeignKey('user.email'), comment="填报人email")
user_info = relationship('User', uselist=False, backref='user') user_info = relationship('User', uselist=False, backref='user')
title = Column(String(128), comment="标题") title = Column(String(128), comment="标题")
department = Column(Integer, comment="填报部门") department = Column(Integer, comment="填报部门")

View File

@ -6,8 +6,8 @@ from Utils.SqlAlchemyUtils import Base
class User(Base): class User(Base):
__tablename__ = "user" __tablename__ = "user"
openid = Column(String(255), primary_key=True, comment="用户OpenID") # openid = Column(String(255), primary_key=True, comment="用户OpenID")
email = Column(String(64), unique=True, index=True, comment="邮箱") email = Column(String(255), primary_key=True, comment="邮箱")
name = Column(String(32), comment="用户名") name = Column(String(32), comment="用户名")
department = Column(Text, comment="部门") department = Column(Text, comment="部门")
post = Column(Text, comment="职务") post = Column(Text, comment="职务")

View File

@ -32,8 +32,8 @@ def daily_get(req: DailySchemas.DailyGetReq, db: Session = Depends(get_db),
@router.post("/daily_add", response_model=DailySchemas.DailyAddRes, summary="添加日报") @router.post("/daily_add", response_model=DailySchemas.DailyAddRes, summary="添加日报")
def daily_add(req: DailySchemas.DailyAddReq, db: Session = Depends(get_db), def daily_add(req: DailySchemas.DailyAddReq, db: Session = Depends(get_db),
token_data: TokenData = Depends(token_data_depend)): token_data: TokenData = Depends(token_data_depend)):
if req.fill_user != token_data.openid: if req.fill_user != token_data.email:
raise HTTPException(detail="填报人与id不符", status_code=305) raise HTTPException(detail="填报人与email不符", status_code=305)
# 本部门填报权限 # 本部门填报权限
print(token_data.department, token_data, "token_data.departmentxx") print(token_data.department, token_data, "token_data.departmentxx")
if str(req.department) not in token_data.department and not check_auth(token_data.auth_data, ['7']): if str(req.department) not in token_data.department and not check_auth(token_data.auth_data, ['7']):

View File

@ -34,7 +34,7 @@ def login_to_app(req: UserSchemas.LoginToAppReq, db: Session = Depends(get_db)):
@router.post('/get_user_info', summary='获取用户信息', tags=["用户接口"], response_model=UserSchemas.GetUserInfoRes) @router.post('/get_user_info', summary='获取用户信息', tags=["用户接口"], response_model=UserSchemas.GetUserInfoRes)
def get_user_info(token_data: TokenData = Depends(registered_depend), db: Session = Depends(get_db)): def get_user_info(token_data: TokenData = Depends(registered_depend), db: Session = Depends(get_db)):
user_data = UserCrud.get_full_user_info(db, token_data.openid) user_data = UserCrud.get_full_user_info(db, token_data.email)
if not user_data: if not user_data:
raise HTTPException(detail="用户未注册", status_code=403) raise HTTPException(detail="用户未注册", status_code=403)
if not user_data['email']: if not user_data['email']:
@ -52,10 +52,10 @@ def change_user_info_and_email(req: UserSchemas.ChangeUserInfoReq, token_data: T
checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change) checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change)
if not checked: if not checked:
raise HTTPException(detail="邮箱验证码错误", status_code=303) raise HTTPException(detail="邮箱验证码错误", status_code=303)
if token_data.openid != req.openid: if token_data.email != req.email:
raise HTTPException(detail="无权限的操作", status_code=303) raise HTTPException(detail="无权限的操作", status_code=303)
user = UserCrud.change_user_info(db, token_data.openid, UserSchemas.UserInfoChange(**req.dict(), registered=True)) user = UserCrud.change_user_info(db, token_data.email, UserSchemas.UserInfoChange(**req.dict(), registered=True))
auth_data = AuthCrud.get_user_auth(db, token_data.openid) auth_data = AuthCrud.get_user_auth(db, token_data.email)
user_data = user.to_dict() user_data = user.to_dict()
user_data["auth_data"] = auth_data user_data["auth_data"] = auth_data
new_token_data = TokenData(**user_data) new_token_data = TokenData(**user_data)
@ -66,28 +66,28 @@ def change_user_info_and_email(req: UserSchemas.ChangeUserInfoReq, token_data: T
@router.post('/change_user_info', tags=["用户接口"], summary='修改用户信息') @router.post('/change_user_info', tags=["用户接口"], summary='修改用户信息')
def change_user_info(req: UserSchemas.ChangeUserInfoReq, token_data: TokenData = Depends(token_data_depend), def change_user_info(req: UserSchemas.ChangeUserInfoReq, token_data: TokenData = Depends(token_data_depend),
db: Session = Depends(get_db)): db: Session = Depends(get_db)):
if token_data.openid != req.openid: if token_data.email != req.email:
raise HTTPException(detail="无权限的操作", status_code=303) raise HTTPException(detail="无权限的操作", status_code=303)
UserCrud.change_user_info(db, token_data.openid, UserSchemas.UserInfoChange(**req.dict())) UserCrud.change_user_info(db, token_data.email, UserSchemas.UserInfoChange(**req.dict()))
return {'msg': "修改成功", 'state': 1} return {'msg': "修改成功", 'state': 1}
@router.post('/bind_email', tags=["用户接口"], summary='绑定email') @router.post('/bind_email', tags=["用户接口"], summary='邮箱登录')
def bind_email(req: UserSchemas.BindEmailReq, def bind_email(req: UserSchemas.BindEmailReq,
db: Session = Depends(get_db)): db: Session = Depends(get_db)):
checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change) checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change)
if not checked: if not checked:
raise HTTPException(detail="邮箱验证码错误", status_code=303) raise HTTPException(detail="邮箱验证码错误", status_code=303)
user = UserCrud.get_user_info(db, req.openid) user = UserCrud.get_user_info(db, req.email)
if user: # if user:
# 邮箱已绑定 # # 邮箱已绑定
if user.email and user.email != req.email: # if user.email and user.email != req.email:
raise HTTPException(detail="该微信已绑定邮箱,请使用该微信号绑定的邮箱登录", status_code=403) # raise HTTPException(detail="该微信已绑定邮箱,请使用该微信号绑定的邮箱登录", status_code=403)
if not user: if not user:
user = UserCrud.create_user(db, req.openid) user = UserCrud.create_user(db, req.email)
if not user.registered: if not user.registered:
UserCrud.update_user_info_from_email(db, req.openid, req.email) UserCrud.update_user_info_from_email(db, req.email)
auth_data = AuthCrud.get_user_auth(db, req.openid) auth_data = AuthCrud.get_user_auth(db, req.email)
user_data = user.to_dict() user_data = user.to_dict()
user_data["auth_data"] = auth_data user_data["auth_data"] = auth_data
token_data = TokenData(**user_data) token_data = TokenData(**user_data)
@ -106,6 +106,17 @@ def get_email_verify_code(body: UserSchemas.EmailSendReqBody):
return {"msg": "验证码已发送至邮箱,请查看", "state": 1} return {"msg": "验证码已发送至邮箱,请查看", "state": 1}
@router.post("/refresh_token", tags=["用户接口"], summary="重新获取token")
def refresh_token(token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)):
auth_data = AuthCrud.get_user_auth(db, token_data.email)
user = UserCrud.get_user_info(db, token_data.email)
user_data = user.to_dict()
user_data["auth_data"] = auth_data
token_data = TokenData(**user_data)
token = create_token(token_data)
return {'token': token}
department_crud = auto_create_crud(Department, 'department', "部门", auto_create_keys=['id'], tags=["部门职务操作"]) department_crud = auto_create_crud(Department, 'department', "部门", auto_create_keys=['id'], tags=["部门职务操作"])
post_crud = auto_create_crud(Post, 'post', "职务", auto_create_keys=['id'], tags=["部门职务操作"]) post_crud = auto_create_crud(Post, 'post', "职务", auto_create_keys=['id'], tags=["部门职务操作"])
department_crud.mount(router) department_crud.mount(router)

View File

@ -10,7 +10,7 @@ class LoginToAppReq(BaseModel):
class LoginToAppRes(BaseModel): class LoginToAppRes(BaseModel):
openid: str email: str
# registered: bool # registered: bool
# token: str # token: str
@ -32,7 +32,6 @@ class PostInfo(BaseModel):
class GetUserInfoRes(BaseModel): class GetUserInfoRes(BaseModel):
openid: Optional[str]
email: Optional[str] email: Optional[str]
post: Optional[str] post: Optional[str]
post_list: Optional[List[PostInfo]] post_list: Optional[List[PostInfo]]
@ -44,25 +43,22 @@ class GetUserInfoRes(BaseModel):
class TokenData(BaseModel): class TokenData(BaseModel):
openid: str email: str
registered: bool registered: bool
auth_data: Union[str, None] auth_data: Union[str, None]
department: Union[str, None] department: Union[str, None]
post: Union[str, None] post: Union[str, None]
email: Union[str, None]
class UserInfoChange(BaseModel): class UserInfoChange(BaseModel):
openid: str
email: str email: str
name: str name: Optional[str]
post: str post: Optional[str]
department: str department: Optional[str]
registered: bool registered: Optional[bool]
class UserInfo(BaseModel): class UserInfo(BaseModel):
openid: str
email: str email: str
name: str name: str
post: str post: str
@ -75,7 +71,6 @@ class ChangeUserInfoReq(UserInfoChange):
class BindEmailReq(BaseModel): class BindEmailReq(BaseModel):
openid: str
email: str = "xxxx@fecr.com.cn" email: str = "xxxx@fecr.com.cn"
email_code: str email_code: str