MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


4 participantes

    [Resolvido]Recuperar senha de login de usuário

    Pablo Weber
    Pablo Weber
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 195
    Registrado : 22/11/2010

    [Resolvido]Recuperar senha de login de usuário Empty [Resolvido]Recuperar senha de login de usuário

    Mensagem  Pablo Weber 16/3/2018, 15:19

    Bom dia a todos do fórum.

    Surgiu uma dúvida agora a pouco, de como eu poderia proceder para criar um form de recuperação de senha de usuário.

    Procurei no fórum mas não achei algo que se relaciona-se com meu problema.

    Gostaria de saber se alguém sabe uma maneira ou se possui um exemplo que eu possa estudar para a minha aplicação.

    A senha do usuário é criptografada.

    Esse problema é recorrente, o pessoal do meu setor volta e meia me solicita para alterar a senha de usuário, mas acontece que as vezes estou ausente aí não tem como. E pensando nisso que pensei na possibilidade de fazer essa alteração no sistema.

    Se alguém puder me dar o norte, ou quiser postar algo que possa seguir como base, agradeço.

    Obrigado.
    avatar
    thiagonsilvaa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 384
    Registrado : 12/01/2017

    [Resolvido]Recuperar senha de login de usuário Empty Recuperar senha de login de usuário

    Mensagem  thiagonsilvaa 16/3/2018, 17:10

    Boa tarde !

    Uma boa dica é usando o envio de email via cdosys. Uso em minhas aplicações e funciona muito bem !

    Sobre a criptografia da senha, qual seria ?

    Abraços.
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  CassioFabre 16/3/2018, 17:17

    Boa tarde,

    No meu sistema, quando o usuário esquece a senha, envio um e-mail via CDOSys para o e-mail padrão dele já previamente cadastrado. Algo parecido com o que um site costuma fazer. A única coisa que solicito é a inserção do usuário no campo login, para verificação de existência do usuário no sistema e também de qual o e-mail padrão dele cadastrado. Caso não exista um e-mail cadastrado, não permito a recuperação da senha. Mas você pode até mesmo abrir uma caixa para que o usuário coloque um e-mail. O código do botão é o seguinte:

    Código:
       'VERIFICAÇÕES
        If IsNull(cbxLogin) = True Then
            MsgBox "Informe o nome de usuário no campo Login.", vbCritical, "Erro"
            cbxLogin.SetFocus
            Exit Sub
        ElseIf DCount("login", "tblUsuario", "login = '" & cbxLogin & "'") = 0 Then
            MsgBox "O usuário " & cbxLogin & " não existe.", vbCritical, "Erro"
            cbxLogin.SetFocus
            Exit Sub
        ElseIf DLookup("ativo", "tblUsuario", "login = '" & cbxLogin & "'") = False Then
            MsgBox "O usuário " & cbxLogin & " está desativado e, por isso, não é possível recuperar sua senha." & vbCrLf & vbCrLf & "Contacte o administrador ou gerente para mais informações.", vbCritical, "Erro"
            cbxLogin.SetFocus
            Exit Sub
        End If
        
        'Pesquisa o email padrão do usuário no sistema, caso possua. Passa este valor para variável strEmail.
        'Pesquisa a senha do usuário na tblUsuario e passa o valor para variável strSenha
        Dim strEmail, strSenha As String
        
        Dim db As Database
        Dim rs As Recordset
        
        Set db = CurrentDb
        Set rs = db.OpenRecordset("select * from tblEmail where usuario = '" & cbxLogin & "' and padrao = true")
        
        If rs.RecordCount > 0 Then
            strEmail = rs!email
            strSenha = fncCrip(DLookup("senha", "tblUsuario", "login = '" & cbxLogin & "'"), 102030)
        Else
            MsgBox "O usuário " & cbxLogin & " não possui e-mail cadastrado no sistema." & vbCrLf & vbCrLf & "Contacte o administrador ou gerente.", vbCritical, "Erro"
            Exit Sub
        End If
            
        rs.Close
        
        'Rotina do envio do email pelo email padrão do administrador
        Set rs = db.OpenRecordset("select * from tblEmail where usuario = 'admin' and padrao = true")
        
        Dim strAssunto, strMensagem As String
        
        strAssunto = "Recuperação de senha"
        
        'aqui escrevo a mensagem que irá no corpo do e-mail.
        strMensagem = "Bom dia,<br><br>Foi solicitada no sistema a recuperação da senha do usuário <i>" & cbxLogin & "</i>.<br><br>"
        strMensagem = strMensagem & "A senha é: <b>" & strSenha & "</b><br><br>"
        strMensagem = strMensagem & "É extremamente importante guardar esta senha em local seguro e de facil acesso para caso não poder recuperar imediatamente."
        strMensagem = strMensagem & "<br><br>Atenciosamente, equipe sistema.<br><br>"
        strMensagem = strMensagem & "Este é um email automático, por favor não o responda."
        
        On Error GoTo erroMail
        
        Dim Mens As Object
        Dim Config As Object
        Set Mens = CreateObject("CDO.Message")
        Set Config = CreateObject("CDO.Configuration")
        
        With Config
            .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = rs!smtp
            .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = rs!porta
            .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            .Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
            .Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
            .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = rs!email
            .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = fncCrip(rs!senha, 102030)
            .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
            
            .Fields.Update
        End With
        
        Set Mens = New CDO.Message
        With Mens
            Set .Configuration = Config
            .From = rs!nome
            .Sender = rs!email
                
            .BodyPart.charset = "utf-8"
            .Subject = strAssunto
            '.htmlbody = Replace(txtMensagem, vbCrLf, "<br>")
            .htmlbody = strMensagem
            .To = strEmail
            
            .send
        End With
        
        Set Mens = Nothing
        Set Config = Nothing
        
        MsgBox "A senha foi enviada para o email " & strEmail & " com sucesso.", vbInformation, "Recuperação de senha"

    erroMail:
    If Err.Number = 13 Then
        Resume Next
    Else
        Resume Next
    End If

    O email fica assim:
    [Resolvido]Recuperar senha de login de usuário 112

    Em outro sistema, utilizando a mesma ideia, faço o e-mail para ficar da seguinte forma com um pouco mais de informações para caso o usuário não tenha solicitado essa ação, saber exatamente em que estação e qual o ip da mesma para averiguação:
    [Resolvido]Recuperar senha de login de usuário 211

    Aqui um tutorial sobre envio de e-mails via CDO no Access: usandoaccess.com.br/tutoriais/enviar-email-usando-o-cdosys.asp (copiar e colar no navegador)

    Espero que consiga aplicar!

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    Pablo Weber
    Pablo Weber
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 195
    Registrado : 22/11/2010

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  Pablo Weber 17/3/2018, 12:10

    Que padrão meu amigo, muito bom.

    mas esta dando um erro na fncCrip, não esta declarada
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7922
    Registrado : 15/03/2013

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  Alvaro Teixeira 17/3/2018, 13:48

    Olá a todos,

    Cassio, parabéns isso é que é automatizar!
    Sugestão, não sei se já tem, mas ficava perfeito obrigar o utilizador a alterar a palavra passe no próximo login após a recuperação.

    Quanto à função em falta podemos ajustar para usar a nossa ou outra qualquer que existe no fórum.

    No entanto vamos ver se o colega pode disponibilizar.

    Abraço a todos
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  CassioFabre 19/3/2018, 10:38

    Bom dia,

    Obrigado ahteixeira. Buscamos sempre melhorar nossas aplicações. Essa ideia de obrigar o usuário a alterar a senha é ótima. Vou implementar o quanto antes.

    A função fncCrip é a função de criptografia usada pelo Avelino no Maestro:
    Código:
    Public Function fncCrip(strTexto As String, Optional chave As Long = 0)
        Dim j As Integer, r As String
        If chave <> 102030 Then Exit Function
        For j = 1 To Len(strTexto)
            r = r & Chr((Asc(Mid(strTexto, j, 1)) Xor 36))
        Next j
        fncCrip = r
    End Function

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7922
    Registrado : 15/03/2013

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  Alvaro Teixeira 19/3/2018, 12:12

    Olá a todos,

    Cassio Fabre, fico feliz por ter gostado da sugestão!
    Ficamos aguardar o retorno do colega Pablo Weber.

    cheers
    Pablo Weber
    Pablo Weber
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 195
    Registrado : 22/11/2010

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  Pablo Weber 20/3/2018, 21:13

    Boa tarde amigos ahteixeira e Cassio Fabre.
    Desculpe o retorno somente agora, estive fora da cidade a trabalho e cheguei esta madrugada, ainda não tive um tempo para testar essa parte da função fncCrip do mestre Avelino, mas com certeza assim que der vou verificar se na minha aplicação dá certo.
    Mas desde já agrade o empenho de todos vocês, e como disse assim que der retorno com novidades.
    Só peço permissão para continuar com o tópico em aberto até o momento.
    Obrigado.
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  CassioFabre 27/3/2018, 13:21

    Bom dia,

    Pegando a ideia do ahteixeira, fiz um pequeno modelo que envia ao usuário uma senha aleatória (diferente da realmente de acesso ao sistema) e o obriga a alterar essa senha no primeiro acesso após o pedido de recuperação.

    Para usar o modelo, faça o seguinte:

    - Entre com o usuario admin (senha: 123), vá até a tabela tblUsuario e e veja que há 3 usuário cadastrados no sistema: admin, support e user. O support será o responsável por enviar as senhas dos usuários como explico abaixo.

    - Vá até a tblEmail e cadastre um e-mail para cada usuário. Deixei alguns campos já preenchidos, como o campo SMPT e o campo PORTA, porém esses dados são para e-mails @gmail.com. Caso você utilize outro servidor (hotmail, uol, etc) preencha os dados conforme o seu servidor de e-mail.

    Um detalhe neste passo é que a senha deve ser inserida criptografada. Para isso abra o editor VBA (Alt + F11) depois entre em qualquer Módulo ou formulário e abra a janela de verificação imediata (CTRL + G) e digite o seguinte:
    Código:
    ?fncCrip("suasenha", 102030)
    Onde suasenha é a senha do e-mail que você está cadastrando.

    Obviamente, num sistema em funcionamento todos esses passos seriam feitos através de um formulário. Mas em se tratando apenas de um modelo, podemos fazer assim.

    É importantíssimo que preencha o campo usuario com o login correto do usuário relativo a este e-mail.

    Não se esqueça de forma alguma de cadastrar o email do usuário Support, pois, como dito acima, os e-mails serão enviados através deste usuário.

    - Depois de cadastrar todos os e-mails, abra o formLogin e preencha apenas o campo Login com qualquer um dos usuários. Depois disso clique no botão "Esqueci minha senha". Aguarde a confirmação do envio e abra o e-mail referente ao usuário que solicitou a recuperação. O e-mail será como o abaixo:
    [Resolvido]Recuperar senha de login de usuário 114

    A senha informada ao usuário é provisória e aleatória, não correspondendo à real senha que ele tem no sistema. No próximo login, usando a senha informada no e-mail, aparecerá a seguinte mensagem:
    [Resolvido]Recuperar senha de login de usuário 213

    E então aberto a tela de alteração de senha:
    [Resolvido]Recuperar senha de login de usuário 310

    Espero que entendam. Abaixo o link do modelo de exemplo:

    https://www.maximoaccess.com/t32918-recuperacao-de-senha-automatica-via-e-mail

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    Pablo Weber
    Pablo Weber
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 195
    Registrado : 22/11/2010

    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  Pablo Weber 27/3/2018, 18:25

    Bom dia amigos.

    CassioFabre, olhei seu exemplo e achei muito bom, vou estudar como você fez as rotinas e ver no que posso adaptar.

    Parabéns a todos.

    Muito obrigado.

    Conteúdo patrocinado


    [Resolvido]Recuperar senha de login de usuário Empty Re: [Resolvido]Recuperar senha de login de usuário

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 17/5/2024, 10:05