Skip to content

Conversation

Sanapol
Copy link

@Sanapol Sanapol commented Aug 22, 2025

добавление смены пароля авторизированного пользователя

@befayer
Copy link

befayer commented Sep 6, 2025

@GetMapping("/password") принимает @RequestBody @Valid UserPasswordDto — так делать нельзя. GET без тела; форма смены пароля рендерится без DTO. Ошибки приходят через flash/X-Inertia или query.

– После PATCH /users/password лучше делать redirect (PRG), чтобы не отдавать 200 на повторную отправку формы. Ошибки валидации нужно отдавать централизованно через @ControllerAdvice (уже есть), а не try/catch в контроллере.

– userRepository.findByEmail(getCurrentUsername()).get() — возможен NoSuchElementException. Нужен orElseThrow() с понятным 404/401 сценарием.

@befayer
Copy link

befayer commented Sep 6, 2025

– Именование методов контроллера
ChangeAccountPassword → changeAccountPassword (camelCase).

— добавить проверку «новый пароль ≠ старый».
— сопоставление newPassword и repeatNewPassword лучше вынести в аннотацию уровня класса (@FieldMatch).

– В PATCH ловим MatchingPasswordsException | WrongPasswordException и вручную рендерим Inertia. Пусть сервис бросает исключения, а Advice мапит их в 400/422 и заполняет ошибки для Inertia. Контроллер станет тоньше.

– passwordChange() — @transactional (write).

– Без System.out.println. Лучше логгер.

– после смены пароля неплохо: ревокнуть refresh-токены/завершить другие сессии.

@Sanapol
Copy link
Author

Sanapol commented Sep 10, 2025

@befayer привет
-DTO в GET убрал
-Добавил UserNotFoundException для обработки findByEmail
-проверку новый пароль != старый пароль добавил

делаю сопоставление newPassword и repeatNewPassword

у меня появились вопросы:
-passwordChange() — @transactional (запись) - это что и зачем?

-После PATCH /users/password лучше делать redirect (PRG), чтобы не отдавать 200 на повторную отправку формы. --- так нужно же через inertia все делать и обычный редирект по API у нас не сработает, если я все правильно понимаю, объясни пожалуйста.

-В PATCH перехватываем MatchingPasswordsException | WrongPasswordException и вручную рендерим Inertia. Пусть сервис генерирует исключения, а Advice преобразует их в 400/422 и заполняет ошибки для Inertia. Контроллер станет проще. --- если я правильно понял то я просто с try/catch перемудрил и надо просто его убрать. И на счет ControllerAdvice его надо настроить чтобы он заполнял ошибки для inertia? или inertia автоматически при генерации исключения подхватит.

-после смены пароля неплохо бы обновить токены/завершить другие сеансы --- да я это обязательно сделаю, но у нас пока нет токенов)) в ПР соседнем вроде есть, но он еще не принят

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants