MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Recuperar senha de login de usuário

    Compartilhe
    avatar
    Pablo Weber
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    [Resolvido]Recuperar senha de login de usuário

    Mensagem  Pablo Weber em Sex 16 Mar 2018, 3:19 pm

    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.

    thiagonsilvaa
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Recuperar senha de login de usuário

    Mensagem  thiagonsilvaa em Sex 16 Mar 2018, 5:10 pm

    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.
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  CassioFabre em Sex 16 Mar 2018, 5:17 pm

    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:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    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:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    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!
    avatar
    Pablo Weber
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  Pablo Weber em Sab 17 Mar 2018, 12:10 pm

    Que padrão meu amigo, muito bom.

    mas esta dando um erro na fncCrip, não esta declarada
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sab 17 Mar 2018, 1:48 pm

    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
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  CassioFabre em Seg 19 Mar 2018, 10:38 am

    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!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Seg 19 Mar 2018, 12:12 pm

    Olá a todos,

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

    cheers
    avatar
    Pablo Weber
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  Pablo Weber em Ter 20 Mar 2018, 9:13 pm

    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.
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  CassioFabre em Ter 27 Mar 2018, 12:21 pm

    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:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    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:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    E então aberto a tela de alteração de senha:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Espero que entendam. Abaixo o link do modelo:

    drive.google.com/open?id=17EXVQcQt5HWf0oUCRSrrq5mdC7V63RSy    (copiar e colar no navegador)

    Abraço.


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

    Respeito às Regras 100%

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

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

    Mensagem  Pablo Weber em Ter 27 Mar 2018, 5:25 pm

    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.

      Data/hora atual: Sab 18 Ago 2018, 11:32 pm