Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Cadastro e Login - #31 Esqueci minha senha I

19/12/2018

Na vídeo-aula de hoje iremos criar nossa página relativa a Esqueci Minha Senha do sistema de login. Para isso, utilizaremos o PHP e a recém criada ClassMail.

Esqueci Minha Senha com PHP

Primeiramente vamos criar nossa view esqueci-minha-senha.php:

<?php \Classes\ClassLayout::setHead('Esqueci Minha Senha','Recupere sua senha.'); ?>

<div class="topFaixa float w100 center">Esqueci minha senha</div>

<div class="retornoSen float w100 center"></div>

<form name="formSenha" id="formSenha" action="<?php echo DIRPAGE.'controllers/controllerSenha'; ?>" method="post">
    <div class="cadastro float center">
        <input class="float w100 h40" type="email" id="email" name="email" placeholder="Email:" required>
        <input class="float w100 h40" type="text" id="dataNascimento" name="dataNascimento" placeholder="Data de Nascimento:" required>
        <input class="float w100 h40" type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" required>
        <input class="inlineBlock h40" type="submit" value="Solicitar">
    </div>
</form>

<?php \Classes\ClassLayout::setFooter(); ?>

Posteriormente vamos criar nossa view redefinicaoSenha.php:

<?php \Classes\ClassLayout::setHead('Redefinição de Senha','Redefina sua senha!'); ?>

<div class="topFaixa float w100 center">
    Cadastro de Clientes
</div>

<div class="retornoSen"></div>

<form name="formRedSenha" id="formRedSenha" action="<?php echo DIRPAGE.'controllers/controllerConfirmacaoSenha'; ?>" method="post">
    <div class="cadastro float center">
        <input class="float w100 h40" type="email" id="email" name="email" value="<?php echo \Traits\TraitParseUrl::parseUrl(1); ?>" required>
        <input class="float w100 h40" type="text" id="token" name="token" value="<?php echo \Traits\TraitParseUrl::parseUrl(2); ?>" required>
        <input class="float w100 h40" type="password" id="senha" name="senha" placeholder="Senha:" required>
        <input class="float w100 h40" type="password" id="senhaConf" name="senhaConf" placeholder="Confirmação da Senha:" required>
        <input class="float w100 h40" type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" required>
        <input class="inlineBlock h40" type="submit" value="Cadastrar Nova Senha">
    </div>
</form>

<?php \Classes\ClassLayout::setFooter(); ?>

Posteriormente iremos criar nosso controllerSenha.php:

<?php
$validate=new Classes\ClassValidate();
$validate->validateFields($_POST);
$validate->validateEmail($email);
$validate->validateIssetEmail($email,"senha");
$validate->validateData($dataNascimento);
$validate->validateDataNascimento($dataNascimento,$email);
$validate->validateCaptcha($gRecaptchaResponse);
echo $validate->validateFinalSen($arrVar);

Repare no código acima que criamos dois métodos novos: validateDataNascimento($dataNascimento,$email) e o validateFinalSen($arrVar):

#Validação se a data é igual a data do banco de dados
public function validateDataNascimento($dataNascimento,$email)
{
    $dataDb=$this->login->getDataUser($email)["data"]["dataNascimento"];
    if($dataNascimento == $dataDb){
        return true;
    }else{
        $this->setErro("Data de nascimento não confere com o usuário!");
        return false;
    }
}

#Validação final do cadastro
public function validateFinalSen($arrVar)
{
    if(count($this->getErro())>0){
        $arrResponse=[
            "retorno"=>"erro",
            "erros"=>$this->getErro()
        ];
    }else{
        $this->mail->sendMail(
            $arrVar['email'],
            $arrVar['nome'],
            $arrVar['token'],
            "Link para Confirmação de Senha",
            "
             <strong>Redefinação da Senha</strong><br>
             Redefina sua senha <a href='".DIRPAGE."redefinicaoSenha/{$arrVar['email']}/{$arrVar['token']}'>clicando aqui</a>.
            "
        );
        $arrResponse=[
            "retorno"=>"success",
            "erros"=>null
        ];
        $this->cadastro->insConfirmation($arrVar);
    }
    return json_encode($arrResponse);
}

No model classCadastro fizemos algumas alterações no método insertCad e criamos o método insConfirmation.

#Realizará a inserção no banco de dados
public function insertCad($arrVar)
{
    $this->insertDB(
      "users",
      "?,?,?,?,?,?,?,?,?",
        array(
            0,
            $arrVar['nome'],
            $arrVar['email'],
            $arrVar['hashSenha'],
            $arrVar['dataNascimento'],
            $arrVar['cpf'],
            $arrVar['dataCreate'],
            'user',
            'confirmation'
        )
    );

    $this->insConfirmation($arrVar);
}

#Inserção de confirmação
public function insConfirmation($arrVar)
{
    $this->insertDB(
        "confirmation",
        "?,?,?",
        array(
            0,
            $arrVar['email'],
            $arrVar['token']
        )
    );
}

No javascript vamos fazer uma pequena errata no VMasker para evitar conflitos em páginas que não tenhamos um dos campos (cpf ou data de nascimento):

//Máscaras do formulário de cadastro
$('#cpf , #dataNascimento').on('focus', function () {
    var id=$(this).attr("id");
    if(id == "cpf"){VMasker(document.querySelector("#cpf")).maskPattern("999.999.999-99");}
    if(id == "dataNascimento"){VMasker(document.querySelector("#dataNascimento")).maskPattern("99/99/9999")};
});

Por fim vamos fazer nosso ajax:

//Ajax do formulário de confirmação de senha
$("#formSenha").on("submit",function(event){
    event.preventDefault();
    var dados=$(this).serialize();

    $.ajax({
        url: getRoot()+'controllers/controllerSenha',
        type: 'post',
        dataType: 'json',
        data: dados,
        success: function (response) {
            if(response.retorno == 'success'){
                $('.retornoSen').html("Redefinição de senha enviada com sucesso!");
            }else{
                getCaptcha();
                $('.retornoSen').empty();
                $.each(response.erros,function(key,value){
                    $('.retornoSen').append(value+'
'); }); } } }); });

Ufa! Essa aula foi pesada hein!

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Cadastro e Login - #30 Confirmação de Cadastro
Nessa vídeo-aula faremos a confirmação do cadastro do usuário através da url linkada pelo email.
Saiba mais!
Cadastro e Login - #32 Esqueci minha senha II
Vamos finalizar o sistema de envio de senhas perdidos utilizando o php e a ClassMail.
Saiba mais!
Cadastro e Login
Neste curso vamos aprender a criar um sistema completo de cadastro e login.
Saiba mais!