async def create_user( *, user_in: BaseUserCreate, # current_user: User = Depends(get_current_active_superuser), background_tasks: BackgroundTasks ): """ Create new user. """ user = await User.get_by_email(email=user_in.email) if user: raise HTTPException( status_code=400, detail="The user with this username already exists in the system.", ) hashed_password = get_password_hash(user_in.password) db_user = BaseUserCreate( **user_in.create_update_dict(), hashed_password=hashed_password ) created_user = await User.create(db_user) if settings.EMAILS_ENABLED and user_in.email: background_tasks.add_task( send_new_account_email, email_to=user_in.email, username=user_in.email, password=user_in.password ) return created_user
async def retrieve_meta(self, user_in: BaseUserUpdate, current_user: User = Depends(get_current_active_user)): """ 更新自己的用户 """ if user_in.password is not None and user_in.password != "string": hashed_password = get_password_hash(user_in.password) current_user.hashed_password = hashed_password if user_in.username is not None and user_in.password != "string": current_user.username = user_in.username if user_in.email is not None and user_in.password != "*****@*****.**": current_user.email = user_in.email current_user.first_name = user_in.first_name current_user.last_name = user_in.last_name await current_user.save() return current_user
async def update_user_me( user_in: BaseUserUpdate, current_user: User = Depends(get_current_active_user)): """ Update own user. """ if user_in.password is not None: hashed_password = get_password_hash(user_in.password) current_user.hashed_password = hashed_password if user_in.username is not None: current_user.username = user_in.username if user_in.email is not None: current_user.email = user_in.email await current_user.save() return current_user
async def reset_password(token: str = Body(...), new_password: str = Body(...)): """ Reset password """ email = verify_password_reset_token(token) if not email: raise HTTPException(status_code=400, detail="Invalid token") user = await User.get_by_email(email=email) if not user: raise HTTPException( status_code=404, detail="The user with this username does not exist in the system.", ) elif not User.is_active: raise HTTPException(status_code=400, detail="Inactive user") hashed_password = get_password_hash(new_password) user.hashed_password = hashed_password await user.save() return {"msg": "Password updated successfully"}
async def create(cls, user: BaseUserCreate) -> "User": user_dict = user.dict() password_hash = password.get_password_hash(password=user.password) model = cls(**user_dict, password_hash=password_hash) await model.save() return model