Plugin de autenticação para o Mapas Culturais que combina login local (e-mail e CPF) com múltiplas estratégias sociais (Google, Facebook, LinkedIn, Twitter, Login Cidadão, Gov.br, Decidim etc.), regras de senha configuráveis e proteção contra abuso.
- Cadastro local com fluxo multi-etapas, validação de CPF e aceite de termos LGPD.
- Login por e-mail ou CPF, com limite de tentativas e bloqueio temporário automático.
- Confirmação de conta por e-mail, recuperação de senha com token e troca de senha pelo painel.
- Integração com Google reCAPTCHA v2 (visível) para login, cadastro e recuperação.
- Autenticação social via Opauth (Google, Facebook, LinkedIn, Twitter, Login Cidadão, Gov.br, Decidim) com mapeamento automático de dados.
- Atualização opcional de avatar e metadados ao autenticar via Gov.br ou Decidim.
- Componentes Vue (
login,create-account,change-password,password-strongness) prontos para a Base V2.
- Faça download/clonagem deste repositório e coloque a pasta
MultipleLocalAuthemprotected/application/plugins/do Mapas Culturais. - Garanta que o módulo
LGPDesteja habilitado, pois o cadastro consomeLGPD::acceptTerms. - Instale dependências do Mapas Culturais (este plugin não adiciona dependências externas além das que já vêm com o core/opauth).
Edite config.php do Mapas Culturais:
'plugins' => [
// ... outros plugins'MultipleLocalAuth' => [
'namespace' => 'MultipleLocalAuth',
],
],
'auth.provider' => \MultipleLocalAuth\Provider::class,
'auth.config' => [
// ajuste conforme as tabelas abaixo
],| Chave | Descrição | Padrão | Variável .env |
|---|---|---|---|
salt | Salt usado pelo Opauth | env('AUTH_SALT') | AUTH_SALT |
timeout | Tempo máximo da sessão OAuth | 24 hours | AUTH_TIMEOUT |
loginOnRegister | Autenticar automaticamente após cadastro | false | AUTH_LOGIN_ON_REGISTER |
enableLoginByCPF | Permite login/cadastro via CPF | true | AUTH_LOGIN_BY_CPF |
requireCpf | Exige CPF no cadastro | true | AUTH_REQUIRED_CPF |
metadataFieldCPF | Campo de metadata que armazena CPF | documento | AUTH_METADATA_FIELD_DOCUMENT |
metadataFieldPhone | Campo de metadata que armazena telefone | telefone1 | AUTH_METADATA_FIELD_PHONE |
userMustConfirmEmailToUseTheSystem | Exige validação por e-mail antes do uso | false | AUTH_EMAIL_CONFIRMATION |
sessionTime | Duração da sessão (segundos) | 7200 | AUTH_SESSION_TIME |
statusCreateAgent | Status default do agente criado | Agent::STATUS_ENABLED | STATUS_CREATE_AGENT |
| Chave | Uso | Padrão | Variável .env |
|---|---|---|---|
urlSupportChat | Link incluído nos e-mails | '' | AUTH_SUPPORT_CHAT |
urlSupportEmail | Link de contato por e-mail | '' | AUTH_SUPPORT_EMAIL |
urlSupportSite | URL geral de suporte | '' | AUTH_SUPPORT_SITE |
textSupportSite | Texto exibido com o link | '' | AUTH_SUPPORT_TEXT |
urlImageToUseInEmails | Imagem de fundo para e-mails | null | AUTH_EMAIL_IMAGE |
urlTermsOfUse | URL dos termos de uso | auth/termos-e-condicoes | LINK_TERMOS |
| Chave | Descrição | Padrão | Variável .env |
|---|---|---|---|
passwordMustHaveCapitalLetters | Exigir letra maiúscula | true | AUTH_PASS_CAPITAL_LETTERS |
passwordMustHaveLowercaseLetters | Exigir letra minúscula | true | AUTH_PASS_LOWERCASE_LETTERS |
passwordMustHaveSpecialCharacters | Exigir caractere especial | true | AUTH_PASS_SPECIAL_CHARS |
passwordMustHaveNumbers | Exigir número | true | AUTH_PASS_NUMBERS |
minimumPasswordLength | Tamanho mínimo da senha | 6 | AUTH_PASS_LENGTH |
| Chave | Descrição | Padrão | Variável .env |
|---|---|---|---|
numberloginAttemp | Tentativas antes do bloqueio | 5 | AUTH_NUMBER_ATTEMPTS |
timeBlockedloginAttemp | Tempo de bloqueio (segundos) | 900 | AUTH_BLOCK_TIME |
| Chave | Descrição | Padrão |
|---|---|---|
google-recaptcha-secret | Secret da integração | env('GOOGLE_RECAPTCHA_SECRET') |
google-recaptcha-sitekey | Site key usada no front | env('GOOGLE_RECAPTCHA_SITEKEY') |
Se ambas as chaves estiverem ausentes, o captcha é desativado.
Cada estratégia pode receber visible => bool para controlar se o botão aparece na interface.
client_id,client_secret,redirect_uri,scope(email profilepor padrão).
app_id,app_secret,scope(defaultemail).
api_key,secret_key,redirect_uri,scope(defaultr_emailaddress).
app_id,app_secret. (Fluxo direto do Opauth).
client_id,client_secret,auth_endpoint,token_endpoint,userinfo_endpoint,redirect_uri,scope.
client_id,client_secret,scope,auth_endpoint,token_endpoint,userinfo_endpoint,redirect_uri.state_salt,code_verifier,code_challenge,code_challenge_methodpara PKCE.applySealId(opcional): selo aplicado ao agente autenticado.dic_agent_fields_update: mapa de campos que podem ser atualizados automaticamente (JSON, ex:{"name": "full_name"}).menssagem_authenticated: mensagem exibida quando o usuário já autenticou via Gov.br.
client_id,client_secret,auth_endpoint,token_endpoint,userinfo_endpoint,redirect_uri,scope.- Atualiza automaticamente avatar do agente com a imagem fornecida.
Você pode adicionar ou remover estratégias conforme necessário; qualquer estratégia Opauth disponível no diretório do plugin pode ser configurada.
GET auth.index: renderiza o componente de login.GET auth.register: fluxo multi-etapas de cadastro.GET auth.recover: formulário para solicitar redefinição de senha.GET auth.confirma-email: valida o token enviado por e-mail e ativa a conta.POST auth.validate: validação assíncrona do primeiro passo do cadastro.POST auth.register: criação de conta (gera agente, token de verificação e envia e-mail).POST auth.login: autenticação local (com bloqueio por tentativas via metadata).POST auth.recover/POST auth.dorecover: solicitação e conclusão da recuperação de senha.POST auth.changepassword/POST auth.newpassword: alteração de senha logado ou via token.POST auth.adminchangeuseremail/POST auth.adminchangeuserpassword: rotinas administrativas (acessos protegidos).GET auth.passwordvalidationinfos: retorna as regras de senha atuais para o front-end.
components/login: formulário de login com reCAPTCHA, recuperação de senha e botões sociais.components/create-account: esteira de cadastro com validações de senha, CPF e aceite de termos LGPD.components/change-password: formulário para troca de senha no painel.components/password-strongness: barra de força da senha, reutilizada em cadastro e redefinição.
Todos os componentes carregam textos a partir de components/*/texts.php, permitindo tradução personalizada.
- E-mails: templates Mustache em
views/auth/email-to-validate-account.htmleviews/auth/email-resert-password.html. Você pode copiar/adaptar mantendo as variáveis esperadas. - Telas:
views/auth/*.phprendem os componentes Vue; é possível sobrescrever esses arquivos em um tema customizado. - Estilos: CSS compilado em
assets/css/plugin-MultiplLocalAuth.css. O SCSS-fonte está emassets-src/sass/. - Traduções: arquivos
.poemtranslations/(domíniomultipleLocal).
- Configure o cron/serviço de fila de e-mail do Mapas Culturais antes de habilitar a confirmação por e-mail.
- Ajuste
metadataFieldCPF/metadataFieldPhonepara corresponder ao schema de metadados do seu deployment. - Revise as mensagens carregadas via
textSupportSite,urlSupport*para garantir contato adequado ao usuário. - Gere URLs de callback das estratégias sociais com HTTPS e defina-as nos painéis dos provedores.
Mantemos este documento atualizado a partir do código-fonte do plugin. Contribuições são bem-vindas!