dhilt / dharmadict

MIT License
1 stars 2 forks source link

Translator password #28

Closed dhilt closed 6 years ago

dhilt commented 6 years ago

Администратор должен уметь сбрасывать пароль Переводчика. На UI 2 поля (пароль и подтверждение), на сервере в обработке PATCH /api/users/:id проверка этих полей, генерация хеша и сохранение.

Создавай новый бранч, открывай PR.

dyuvzhenko commented 6 years ago

@dhilt Сделал - https://github.com/dhilt/dharmadict/pull/29. Осталось еще тестов добавить.

dyuvzhenko commented 6 years ago

И еще небольшой баг вдогонку пофиксил - https://github.com/dhilt/dharmadict/commit/f8b1ff1b9a7dd8f66d3ad22f5995fb277705f1e0.

dyuvzhenko commented 6 years ago

И тесты добавил - https://github.com/dhilt/dharmadict/commit/c084608d72c461877c891e727834669ef58d7795. Вроде бы на этом все.

dhilt commented 6 years ago

@BitDen Хорошая попытка! но вот, что ты не учитываешь в своей версии решения. Теперь ты не можешь обновить никакое поле Переводчика (например, описание) без того, чтобы не изменить пароль. При этом сам пароль не восстанавливается на начало редактирования.

Надо разделить процесс редактирования Переводчика от процесса задания нового пароля. Я предлагаю добавить новый роут /translator/DON/edit/password и к нему новый компонент ./app/components/admin/EditUserPassword.js. Новый state:

admin: {
  editUserPassword: {
    id: '', // id редактируемого пользователя
    password: '',
    confirmPassword: '',
    pending: false,
    error: null
  },
  ...
}

На новом экране всего два поля. Контрол "Сброс" просто затирает значение обоих инпутов. "Сохранить" приводит к запросу на сервер по тому же адресу PATCH /api/users/:id. Но только два поля отправляются на сервер: password и passwordConfirmation.

Далее сервер на валидации Users.update смотрит: либо ему пришли данные без password/passwordConfirmation, либо ему пришли только password/passwordConfirmation. Первый случай проходит в точности так же, как раньше, а на второй проходят проверки паролей и генерируется hash. Сам update (вызов elasticClient.index) не меняется, он принимает body, который состоит либо из прежних данных, либо из одного только хэша.

PS Actions, которые связаны с изменением данных через пользовательский ввод должны начинаться с "CHANGE_". См https://github.com/dhilt/dharmadict/blob/master/app/index.js#L26, это сделано, чтобы не засорять reducer log.

dyuvzhenko commented 6 years ago

@dhilt Новый компонент с новыми actions сделал - https://github.com/dhilt/dharmadict/commit/9d863ba8ad354b51dc45c13a38036100bde16424. Типы actions переименовал - https://github.com/dhilt/dharmadict/commit/43f8f8c7a41aa0cb4fcb702a95dede4d36a54c8f. И удалил неуместные теперь тесты на отсутствие языка или описания - https://github.com/dhilt/dharmadict/commit/710a622a96a52f060b2a1894aa43768d909eb24a.

dhilt commented 6 years ago

@BitDen Я внес некоторые изменения и сделал мерж.

dhilt commented 6 years ago

@BitDen Разберись пожалуйста с повторным изменением пароля. Повторный запрос падает с 404 Not found.

dyuvzhenko commented 6 years ago

@dhilt Готово - https://github.com/dhilt/dharmadict/commit/0ae5e5728f0a572200ef1ed0b00ec0e74b641ccc. Просто сбивался id из state.admin.editUserPassword, после первого запроса на сервер.

dhilt commented 6 years ago

@BitDen 👍 а ведь это я же и испортил... кажется, нам пора всерьез задуматься о тестах для front end