Login — iOS
LoginViewController · login/options · login/Model
Equivalente Android: LoginFragment
Tela de entrada do app iOS. Reproduz fielmente o fluxo do Android: autenticação por senha (JWT), biometria FaceID/TouchID, OTP por SMS e seleção de empresa com resolução de permissões.
Arquivos
login/ ├── LoginViewController.swift · UI principal + ações de botão ├── LoginViewControllerTest.swift · testes manuais / mocks ├── options/ · biometria, lembrar senha, OTP └── Model/ · DTOs do payload de login
Fluxo de Autenticação
1
POST /v1/auth/login
Body: { "username": ..., "password": ... }. Retorna jwt_token, user_id, lista de empresas e árvore de permissões.
2
Seleção de empresa
Se houver múltiplas empresas, exibe modal de seleção. O company_id escolhido é persistido em UserDefaults (chave selected_company).
3
Resolução de permissões
Mesma lógica do Android — combina permissões do usuário com as do setor para a empresa selecionada. Resultado salvo em UserDefaults como perms_user (Array<String>).
4
Navegação
Apresenta HomeViewController via UINavigationController ou substituição do root da window.
Funcionalidades
| Feature | Implementação iOS |
|---|---|
| Senha | POST /v1/auth/login via URLSession |
| Biometria | LAContext + JWT salvo no Keychain |
| OTP / SMS | Sub-fluxo em options/ — envia código, valida e gera access token |
| Seleção de empresa | Modal customizado, persiste selected_company em UserDefaults |
| Lembrar senha | Flag em UserDefaults + Keychain para credenciais |
| Permissão de localização | Diálogo de Prominent Disclosure antes de CLLocationManager.requestWhenInUseAuthorization() |
Persistência
| Storage | Chave | Conteúdo |
|---|---|---|
| Keychain | jwt_token | Bearer JWT (acesso seguro p/ biometria) |
| UserDefaults | perms_user | Array de IDs de permissão |
| UserDefaults | selected_company | company_id ativo |
| UserDefaults | user_id, master, driver | Papel e flags |
Endpoints
POST
/v1/auth/loginAutenticação principal — retorna JWT + dados de empresas/permissões.
POST
/v1/auth/generate_access_tokenGeração do JWT após validação OTP.
POST
/v1/auth/refreshRenovação automática do JWT no fluxo biométrico.