Восстановление пароля

Реализация двухшагового восстановления пароля с подтверждением операции по электронной почте. Защита от спама и возможной перегрузки сервера.

Скрытый контент
Комментарии (7)
Arunas
2020-02-04 18:34

Спасибо. Об ролях пользователей: будет про групах пользователей, их permision?

Ответить
Deworker Pro
2020-02-05 12:21

Будет про привязку разрешений к ролям.

Ответить
Arunas
2020-02-05 12:40

Спс

Ответить
Bondarenko Alexandr
2020-02-05 06:10

Кстати, службу для хэширования пароля еще хорошо бы передавать в метод resetPassword, чтобы не дублировать проверку предусловий по хэндлерам: к примеру, бывают предусловия, когда пароль пользователя ограничен каким-то количеством символов, а также должны присутствовать цифры и латиница. Но код станет немного сложнее, т.к. у User'a появится зависимость. В unit тестах придется ее мокать, и в UserBuilder инжектить PasswordHasher.

Ответить
Deworker Pro
2020-02-05 12:26

Да. Ещё хэшер удобно передавать в метод changePassword для проверки текущего пароля:

class User
{
    ...

    public function changePassword(string $current, string $new, PasswordHasher $hasher): void
    {
        if (!$hasher->validate($current, $this->passwordHash)) {
            throw new DomainException('Invalid current password.');
        }

        $this->passwordHash = $hasher->hash($new);
    }
}

А если есть условия, то можно при желании обернуть в объект-значение Password.

Ответить
Bondarenko Alexandr
2020-02-05 06:12

Дмитрий, спасибо за материал! Есть такой вопрос: как вы убеждаетесь, что код для прикладных хэндлеров реализован верно? Тесты для них в проекте отсутствуют.

Ответить
Deworker Pro
2020-02-05 12:28

Их будем тестировать сквозными функциональными тестами контроллеров.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий