Forçar troca de senha no primeiro login com o método LoginUser.

Como identificar, pelo OpStatus do LoginUser, que o usuário precisa definir uma nova senha — e conduzir a troca em uma tela de login própria.

Introdução

Para obrigar um usuário a definir a própria senha no primeiro acesso, o Elipse E3 oferece a propriedade Forçar troca de senha, na aba Propriedades de Segurança do usuário. Em telas de login próprias — que usam LoginUser no lugar da janela padrão — cabe ao script detectar essa exigência e conduzir a troca.

1. Habilitando a propriedade

  1. No E3 Studio, acesse o menu Arquivo e escolha Usuários.
  2. Selecione o item Usuários e dê um duplo clique no usuário desejado.
  3. Abra a aba Propriedades de Segurança.
  4. Altere a opção Forçar troca de senha para Verdadeiro.
  5. Confirme em OK e clique em Aplicar.

A propriedade vale apenas para usuários do Domínio do Elipse E3 — contas com autenticação do Windows são gerenciadas pelo domínio de rede.

Aba Propriedades de Segurança do usuário no E3 Studio, com a opção “Forçar troca de senha” em Verdadeiro.

2. Detectando a exigĂŞncia no login

LoginUser(Username, UserPassword, [OpStatus], [WarnDaysToExpire]) retorna um valor booleano e não exibe nenhuma mensagem. OpStatus é um parâmetro de saída — basta declarar uma variável e passá-la na chamada. Considere o login efetivo somente quando o retorno for True e o OpStatus for 0.

Com a propriedade habilitada, o OpStatus vem 4 (a senha atual deve ser trocada). Outros valores frequentes: 2 credenciais inválidas, 8 senha expirada, 16 conta bloqueada e 32 conta desabilitada. A lista completa está na documentação do LoginUser.

3. Script da tela de login

A tela tem três objetos: spUsuario e spSenha para as credenciais e spNovaSenha, inicialmente invisível, para a nova senha — é a visibilidade desse campo que define a etapa. O código vai no evento Click do botão de confirmação (cole apenas o corpo; o E3 já fornece a linha de declaração do evento):

Dim ok, st

If Screen.Item("spNovaSenha").Visible = False Then

    ' --- Etapa 1: autenticacao ---
    ok = Application.LoginUser(Screen.Item("spUsuario").Value, _
                               Screen.Item("spSenha").Value, st)
    If ok And st = 0 Then Exit Sub          ' login concluido

    If st = 4 Or st = 8 Then                ' troca obrigatoria ou senha expirada
        MsgBox "A senha deste usuario deve ser alterada.", vbExclamation
        Screen.Item("spNovaSenha").Value = ""
        Screen.Item("spNovaSenha").Visible = True
    Else
        MsgBox "Falha no login (status " & st & ").", vbCritical
    End If
Else
    ' --- Etapa 2: troca da senha ---
    ok = Application.ChangeUserPassword(Screen.Item("spUsuario").Value, _
                                        Screen.Item("spSenha").Value, _
                                        Screen.Item("spNovaSenha").Value, st)
    If ok And st = 0 Then
        Screen.Item("spNovaSenha").Visible = False
        Screen.Item("spSenha").Value = ""
        Screen.Item("spNovaSenha").Value = ""
        MsgBox "Senha alterada com sucesso. Faca login novamente.", vbInformation
    Else
        MsgBox "A nova senha foi recusada pela politica do Dominio " & _
               "(status " & st & ").", vbCritical
    End If

End If

ChangeUserPassword(Username, PasswordOld, PasswordNew, [OpStatus]) recebe a senha atual explicitamente, então funciona sem uma sessão autenticada — a situação de quem foi barrado pela troca obrigatória. Teste sempre o retorno: se a nova senha violar a política do Domínio o método falha, e sem essa verificação o script anuncia um sucesso que não houve. O motivo da recusa vem no OpStatus, em códigos a partir de 0x001000.

4. Observações

  • A troca desconecta as demais sessões, exceto aquela onde ela foi executada.
  • “NĂŁo permitir mudança de senha”, na mesma aba, torna a alteração exclusiva do administrador: a troca em tempo de execução retorna 0x002000. Combinada com Forçar troca de senha, deixa o usuário sem saĂ­da.
  • “Permitir mudar senha expirada” precisa estar habilitada para que o fluxo atenda tambĂ©m o OpStatus = 8.
  • Limpe os campos depois de usar — senha em texto claro na propriedade Value de um Setpoint fica acessĂ­vel a qualquer associação ou consulta de propriedade.

Artigos relacionados


Print Friendly, PDF & Email

Este artigo foi Ăştil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Leave a Reply

Your email address will not be published.Required fields are marked *