Repository navigation
Added email verification - #267
ArtemBratyashin wants to merge 9 commits into
Conversation
petrCher
left a comment
There was a problem hiding this comment.
@ArtemBratyashin отредачь эти правки и сделаю мердж
| assert reset_token_1 != reset_token_2 | ||
|
|
||
|
|
||
| def test_legacy_email_case_insensitive_lookup(client_auth: TestClient, dbsession: Session, user_id: int): |
| assert response.status_code == status.HTTP_200_OK | ||
|
|
||
|
|
||
| def test_legacy_email_case_insensitive_lookup(client_auth: TestClient, dbsession: Session, user_id: int): |
|
|
||
| class EmailChange(Base): | ||
| email: Annotated[str, MinLen(1)] | ||
|
|
There was a problem hiding this comment.
ты снял с EmailChange проверку на валидатор почты, то есть при смене можно что угодно задать
| json={"email": "legacy@localhost"}, | ||
| headers={"Authorization": login["token"]}, | ||
| ) | ||
| assert response.status_code == status.HTTP_200_OK |
There was a problem hiding this comment.
в тесте же у домена нет доменной зоны например .com
поэтому 200 при правильном сценарии нельзя получить; сейчас тест пройден, так как отключена проверка в EmailChange
если ее включить тест должен 422 отдавать
| if set(v) & restricted: | ||
| raise ValueError() | ||
| return v | ||
| def check_email(v, validate: bool): |
There was a problem hiding this comment.
коммент от клода (согласен с ним)
check_email: ручные проверки дублируют validate_email — он сам режет все кейсы из issue (@gmail.com, user@, @, пробелы, кириллицу). Параметр validate не нужен: с False функцию никто не вызывает, и лямбда есть только ради него. Оставь так:
def check_email(v: str) -> str:
try:
return validate_email(v, check_deliverability=False, allow_smtputf8=False).normalized
except EmailNotValidError as exc:
raise ValueError("Invalid email address") from exc
Подключай без лямбды, через email_validator = field_validator("email")(check_email), в двух схемах:
- EmailRegister — регистрация
- EmailChange — смена почты (новый адрес)
В EmailLogin и RequestResetForgottenPassword валидатор не нужен: там ищем уже существующую почту, и старые адреса должны проходить.
|
проблема с тестами: Тесты падают не из-за PR: SQLAlchemy без версии в requirements подтянулась 2.1 (последняя), а там greenlet больше не ставится по умолчанию — sqladmin падает на импорте. Временный фикс для этого пр: в requirements.txt заменить SQLAlchemy на SQLAlchemy[asyncio]. psycopg[binary] правильно что добавил, но это только часть проблемы чинит) |

Изменения
Добавил проверку email.
Детали реализации
Функция расширена и в ней добавлено больше условий
Check-List
blackиisortдля Back-End илиPrettierдля Front-End?