---
# System prepended metadata

title: Cinématique utilisateurs
tags: [specs]

---

---
tags: specs
---

# Cinématique utilisateurs

Validité du token d'invitation : 7 jours
Validité du token mdp perdu : 1 jour

URL API
- `/auth/reset-password/`
- `/auth/check-token`
- `/auth/change-password`
- `/auth/confirm-email`

## Connexion
- OK (200)
    - status doit être `active`
- KO (401) / Mot de passe perdu
    - front --> back
      ```
      POST {API_URL}/auth/reset-password/
        email: string
      ```
    - KO email (401) : message email inconnu
    - OK email (200) : envoie d'email mdp perdu
        - (back) generation du forgotten_token
        - (back) timestamp forgotten_at à actualiser
- page front `/login/reset-forgotten-password/:email/:token`

## Invitation d'un utilisateur
- envoie d'email d'invitation
    - envoie d'email mdp perdu
        - (back) generation du forgotten_token
        - (back) timestamp forgotten_at à actualiser
- invité a un lien pour changer son mot de passe
- page front: `/login/activate/:email/:token`
    - front appelle pour vérifier le couple
      ```
      POST {API_URL}/auth/check-token/
        email: string
        token: string
      ```
    - KO : message d'erreur -> redirection vers mdp perdu
    - OK : accès à la page
    - Changement du mdp par le user
      ```
      POST {API_URL}/auth/change-password/
        email: string
        token: string
        password: string
      ```
        - (back) patch du password
        - (back) suppression du forgotten_token
        - (back) suppression de forgotten_at
        - (back) activer le compte si `pending`
        - (back) envoie d'un email quand le compte est activé + Welcome + Tutos + Café + ...

## Confirmation de l'email
> expiration 7 jours

- changement de l'email dans le profile de l'utilisateur
    - le backend détecte que l'email a été modifié
    - (back) changement du status en `pending`
    - (back) envoie de l'email avec le lien de confirmation `/login/confirm-email/:email/:token`
    - (back) payload de réponse avec un meta: email_changed: true
- (front) validation de l'email
      ```
      POST {API_URL}/auth/confirm-email/
        email: string
        token: string
      ```
    - (back) OK (200) ou KO (401)

## TODO
- [x] supprimer forgotten_reset
- [x] supprimer email_confirm ?
- [x] supprimer email_token ?
- [x] supprimer email_change_at ?
- [x] supprimer has_reset_password ?
- [x] supprimer email_confirmation
- [x] ajouter les routes dans le proxy
- [x] supprimer l'action `user:changeEmail`
- [x] Suppression des users ne les vire pas complètement

### Schema

```typescript=
export interface UserInterface {
  _id?: string;
  email: string;
  lastname: string;
  firstname: string;
  group: string;
  permissions: string[];
  password?: string;
  role?: string;
  phone?: string;
  status?: string;
  forgotten_at?: Date;
  forgotten_reset?: string;
  operator?: string;
  territory?: string;
  last_connected_at?: Date;
  deleted_at?: Date;
  created_at?: Date;
  updated_at?: Date;
}
```
