mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2026-03-13 07:49:55 +08:00
Fix #733: don't raise error when updating user with same email
This commit is contained in:
@@ -536,19 +536,19 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
|
||||
async def _update(self, user: models.UD, update_dict: Dict[str, Any]) -> models.UD:
|
||||
for field in update_dict:
|
||||
if field == "email":
|
||||
value = update_dict[field]
|
||||
if field == "email" and value != user.email:
|
||||
try:
|
||||
await self.get_by_email(update_dict[field])
|
||||
await self.get_by_email(value)
|
||||
raise UserAlreadyExists()
|
||||
except UserNotExists:
|
||||
user.email = update_dict[field]
|
||||
user.email = value
|
||||
elif field == "password":
|
||||
password = update_dict[field]
|
||||
await self.validate_password(password, user)
|
||||
hashed_password = get_password_hash(password)
|
||||
await self.validate_password(value, user)
|
||||
hashed_password = get_password_hash(value)
|
||||
user.hashed_password = hashed_password
|
||||
else:
|
||||
setattr(user, field, update_dict[field])
|
||||
setattr(user, field, value)
|
||||
return await self.user_db.update(user)
|
||||
|
||||
|
||||
|
||||
@@ -471,6 +471,16 @@ class TestUpdateUser:
|
||||
|
||||
assert user_manager.on_after_update.called is False
|
||||
|
||||
async def test_email_update_with_same_email(
|
||||
self, user: UserDB, user_manager: UserManagerMock
|
||||
):
|
||||
user_update = UserUpdate(email=user.email)
|
||||
updated_user = await user_manager.update(user_update, user, safe=True)
|
||||
|
||||
assert updated_user.email == user.email
|
||||
|
||||
assert user_manager.on_after_update.called is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.manager
|
||||
|
||||
Reference in New Issue
Block a user