Перейти к основному содержимому

POST /api/investors/me/pin-code/clear — Удаление пин-кода (clearPinCode)

Назначение

Удалить пин-код быстрого входа текущего пользователя. Вызывается аутентифицированным пользователем из личного кабинета; тела запроса нет. После удаления вход возвращается к паролю/СМС (hasPinCode = false). Операция естественно идемпотентна: повторное удаление уже пустого пин-кода успешно.

Metadata

ПолеЗначение
Сервис/контекстidentity
API areapublic
Feature groupsecurity
Статусapproved
Документdocs/06-services/identity/api/investor/clear-pin-code.md

Актор и доступ

ПроверкаЗначение
Actor typeUser (Bearer JWT)
Auth policy / Permissionsauthenticated; permission identity.security.manage-self
Scope (RBAC)self
Record-levelтолько собственная запись (UserId из sub)
Tenant isolationне применяется (ADR-0052)
Auditsecurity-change: событие UserSecurityChangedEvent (PinCodeCleared)

HTTP-контракт

ПолеЗначение
MethodPOST
Route/api/investors/me/pin-code/clear
Success status200
Idempotency headerне применяется — операция естественно идемпотентна (повторное удаление пустого пин-кода = 200)
Correlationсквозной trace через traceparent

Входные данные / параметры запроса

Body отсутствует.

ПолеИсточникТипОбязательностьВалидация / ОграниченияБезопасность
UserIdidentity claims (sub)GuidДавалидный JWT401 без токена

Модель ответа ClearPinCodeCommandResult

ПолеТипОбязательностьИсточникMaskingОписание
investorIdstring (Guid)ДаUserEntity.IdИдентификатор пользователя.

Алгоритм

Получить пользователя-актора (UserId из токена); он должен быть Active, иначе IDENTITY_USER_BLOCKED. Очистить пин-код (PinCodeHash = null); если пин-кода не было — no-op без ошибки (идемпотентность). При фактическом изменении фиксируется доменное событие UserSecurityChangedEvent (вид PinCodeCleared) для аудита. Ответ — investorId, HTTP 200.

Ошибки и failure modes

КодHTTP statusУсловиеСообщениеRetry
— (auth)401Нет/просрочен JWTклиент выполняет re-loginre-login
IDENTITY_USER_BLOCKED400Status != Active«Учётная запись заблокирована»no retry

Acceptance Criteria

  • Given активный пользователь с установленным пин-кодом, When clear-pin-code, Then PinCodeHash = null, поднимается UserSecurityChangedEvent (PinCodeCleared), ответ 200 {investorId}; дальнейший вход по пин-коду недоступен (hasPinCode = false).
  • Given пин-код не задан, When повторный clear-pin-code, Then 200 без ошибки и без события (идемпотентный no-op).
  • Given Status != Active, When clear-pin-code, Then IDENTITY_USER_BLOCKED (400).

Совместимость и наблюдаемость

  • Операция идемпотентна.
  • Logs: UserId; metrics: identity_pin_code_clear_total; traces — OTel.

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные документы