Если пользователь с адресом user+123@gmail.com пытается изменить его на user@gmail.com, ему отправляется ссылка для подтверждения, но при попытке её активировать появляется ошибка «email уже занят».
Казалось бы, система должна поступать следующим образом:
запретить изменение на этот адрес;
принять адрес без подтверждения (так как это фактически один и тот же адрес);
привести адрес к нормальному виду перед проверкой на существование.
Именно. Если пользователь пытается изменить email, а нормализованные адреса совпадают, адрес должен быть изменён без каких-либо дополнительных процедур.