diff --git a/Crud/AuthCrud.py b/Crud/AuthCrud.py index 3565c5f..9050955 100644 --- a/Crud/AuthCrud.py +++ b/Crud/AuthCrud.py @@ -14,8 +14,8 @@ def marge_auth_data(auth_data_list): return auth_data_str -def get_user_auth(db: Session, user_id): - user = db.query(User).filter_by(openid=user_id).first() +def get_user_auth(db: Session, email): + user = db.query(User).filter_by(email=email).first() user_auth_data_str = user.auth_data if not user.auth_data: if user.department: diff --git a/Crud/UserCrud.py b/Crud/UserCrud.py index d998c3b..dc3a48c 100644 --- a/Crud/UserCrud.py +++ b/Crud/UserCrud.py @@ -10,13 +10,13 @@ import json from Utils.SqlAlchemyUtils import get_db_i -def get_user_info(db: Session, openid: str): - user = db.query(User).filter_by(openid=openid).first() +def get_user_info(db: Session, email: str): + user = db.query(User).filter_by(email=email).first() return user -def get_full_user_info(db: Session, openid: str): - user = db.query(User).filter_by(openid=openid).first() +def get_full_user_info(db: Session, email: str): + user = db.query(User).filter_by(email=email).first() if not user: return None departments = [] @@ -35,29 +35,29 @@ def get_full_user_info(db: Session, openid: str): return user_data -def create_user(db: Session, openid: str): - user = User(openid=openid) +def create_user(db: Session, email: str): + user = User(email=email) db.add(user) db.commit() db.refresh(user) return user -def change_user_info(db: Session, openid: str, user_info_change: UserSchemas.UserInfoChange): - db.query(User).filter_by(openid=openid).update(user_info_change.dict()) +def change_user_info(db: Session, email: str, user_info_change: UserSchemas.UserInfoChange): + db.query(User).filter_by(email=email).update(user_info_change.dict()) db.commit() - return db.query(User).filter_by(openid=openid).first() + return db.query(User).filter_by(email=email).first() # 根据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() 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, "department": user_info.department, 'registered': True}) else: - db.query(User).filter_by(openid=openid).update( + db.query(User).filter_by(email=email).update( {'email': email, 'registered': True}) db.commit() diff --git a/Models/DailyModel.py b/Models/DailyModel.py index 78685f0..26fd545 100644 --- a/Models/DailyModel.py +++ b/Models/DailyModel.py @@ -9,7 +9,7 @@ class Daily(Base): id = Column(Integer, primary_key=True, comment="日报ID") 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), ForeignKey('user.openid'), comment="填报人openid") + fill_user = Column(String(128), ForeignKey('user.email'), comment="填报人email") user_info = relationship('User', uselist=False, backref='user') title = Column(String(128), comment="标题") department = Column(Integer, comment="填报部门") diff --git a/Models/UserModel.py b/Models/UserModel.py index 9af7bd6..b4adb70 100644 --- a/Models/UserModel.py +++ b/Models/UserModel.py @@ -6,8 +6,8 @@ from Utils.SqlAlchemyUtils import Base class User(Base): __tablename__ = "user" - openid = Column(String(255), primary_key=True, comment="用户OpenID") - email = Column(String(64), unique=True, index=True, comment="邮箱") + # openid = Column(String(255), primary_key=True, comment="用户OpenID") + email = Column(String(255), primary_key=True, comment="邮箱") name = Column(String(32), comment="用户名") department = Column(Text, comment="部门") post = Column(Text, comment="职务") diff --git a/Router/DailyRouter.py b/Router/DailyRouter.py index af1c0a9..452dacf 100644 --- a/Router/DailyRouter.py +++ b/Router/DailyRouter.py @@ -32,8 +32,8 @@ def daily_get(req: DailySchemas.DailyGetReq, db: Session = Depends(get_db), @router.post("/daily_add", response_model=DailySchemas.DailyAddRes, summary="添加日报") def daily_add(req: DailySchemas.DailyAddReq, db: Session = Depends(get_db), token_data: TokenData = Depends(token_data_depend)): - if req.fill_user != token_data.openid: - raise HTTPException(detail="填报人与id不符", status_code=305) + if req.fill_user != token_data.email: + raise HTTPException(detail="填报人与email不符", status_code=305) # 本部门填报权限 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']): diff --git a/Router/UserRouter.py b/Router/UserRouter.py index ef33ce1..7eb58e6 100644 --- a/Router/UserRouter.py +++ b/Router/UserRouter.py @@ -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) 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: raise HTTPException(detail="用户未注册", status_code=403) 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) if not checked: raise HTTPException(detail="邮箱验证码错误", status_code=303) - if token_data.openid != req.openid: + if token_data.email != req.email: raise HTTPException(detail="无权限的操作", status_code=303) - user = UserCrud.change_user_info(db, token_data.openid, UserSchemas.UserInfoChange(**req.dict(), registered=True)) - auth_data = AuthCrud.get_user_auth(db, token_data.openid) + user = UserCrud.change_user_info(db, token_data.email, UserSchemas.UserInfoChange(**req.dict(), registered=True)) + auth_data = AuthCrud.get_user_auth(db, token_data.email) user_data = user.to_dict() user_data["auth_data"] = auth_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='修改用户信息') def change_user_info(req: UserSchemas.ChangeUserInfoReq, token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)): - if token_data.openid != req.openid: + if token_data.email != req.email: 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} -@router.post('/bind_email', tags=["用户接口"], summary='绑定email') +@router.post('/bind_email', tags=["用户接口"], summary='邮箱登录') def bind_email(req: UserSchemas.BindEmailReq, db: Session = Depends(get_db)): checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change) if not checked: raise HTTPException(detail="邮箱验证码错误", status_code=303) - user = UserCrud.get_user_info(db, req.openid) - if user: - # 邮箱已绑定 - if user.email and user.email != req.email: - raise HTTPException(detail="该微信已绑定邮箱,请使用该微信号绑定的邮箱登录", status_code=403) + user = UserCrud.get_user_info(db, req.email) + # if user: + # # 邮箱已绑定 + # if user.email and user.email != req.email: + # raise HTTPException(detail="该微信已绑定邮箱,请使用该微信号绑定的邮箱登录", status_code=403) if not user: - user = UserCrud.create_user(db, req.openid) + user = UserCrud.create_user(db, req.email) if not user.registered: - UserCrud.update_user_info_from_email(db, req.openid, req.email) - auth_data = AuthCrud.get_user_auth(db, req.openid) + UserCrud.update_user_info_from_email(db, req.email) + auth_data = AuthCrud.get_user_auth(db, req.email) user_data = user.to_dict() user_data["auth_data"] = auth_data token_data = TokenData(**user_data) @@ -106,6 +106,17 @@ def get_email_verify_code(body: UserSchemas.EmailSendReqBody): 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=["部门职务操作"]) post_crud = auto_create_crud(Post, 'post', "职务", auto_create_keys=['id'], tags=["部门职务操作"]) department_crud.mount(router) diff --git a/Schemas/UserSchemas.py b/Schemas/UserSchemas.py index 455d615..70a98ba 100644 --- a/Schemas/UserSchemas.py +++ b/Schemas/UserSchemas.py @@ -10,7 +10,7 @@ class LoginToAppReq(BaseModel): class LoginToAppRes(BaseModel): - openid: str + email: str # registered: bool # token: str @@ -32,7 +32,6 @@ class PostInfo(BaseModel): class GetUserInfoRes(BaseModel): - openid: Optional[str] email: Optional[str] post: Optional[str] post_list: Optional[List[PostInfo]] @@ -44,25 +43,22 @@ class GetUserInfoRes(BaseModel): class TokenData(BaseModel): - openid: str + email: str registered: bool auth_data: Union[str, None] department: Union[str, None] post: Union[str, None] - email: Union[str, None] class UserInfoChange(BaseModel): - openid: str email: str - name: str - post: str - department: str - registered: bool + name: Optional[str] + post: Optional[str] + department: Optional[str] + registered: Optional[bool] class UserInfo(BaseModel): - openid: str email: str name: str post: str @@ -75,7 +71,6 @@ class ChangeUserInfoReq(UserInfoChange): class BindEmailReq(BaseModel): - openid: str email: str = "xxxx@fecr.com.cn" email_code: str