Confirmação De Registo por E-mail(Código de confirmação)

getrixone

Membro

Olá,​
Estou a desenvolver a PAP(Projeto de Aptidão Profissional) e estou a criar o sistema de Registo e Login em PHP e Mysql.
Já tenho o sistema de registro e login e funcionam bem, o que queria fazer era um sistema de confirmação d registo por email, em que quando o utilizador criasse uma conta, seja enviado para o email do mesmo um código/token com o qual pudesse confirmar a conta.
Alguém me conseguia auxiliar nesse sentido? Também gostava de saber se é mais aconselhado ser enviado um link para o email do utilizador e quando o mesmo clicasse nele, ser redirecionado e aparecer "Conta Ativada" ou depois de criada a conta, o utilizador receber um código e ter que o inserir num campo tipo formulário para poder verificar a conta...
Desde já obrigado

Aqui ficam os códigos do registro, login e da conexão:
conexao:

(db.php)
PHP:
<?php
    error_reporting(E_ALL ^ E_DEPRECATED);
    $connect = mysql_connect("localhost","root","") or die("Não foi possível ligar ao servidor...");
    $db = mysql_select_db("basededadospap", $connect) or die("Impossível entrar na Base de dados");
?>
<html>
<header>
    <meta charset="utf-8">
    <title>Meet new Friends!</title>
    <style type="text/css">
        html{
            -webkit-animation: fadein 2s; /* Safari, Chrome and Opera > 12.1 */
               -moz-animation: fadein 2s; /* Firefox < 16 */
                -ms-animation: fadein 2s; /* Internet Explorer */
                 -o-animation: fadein 2s; /* Opera < 12.1 */
                    animation: fadein 2s;
        }

        @keyframes fadein {
            from { opacity: 0; }
            to   { opacity: 1; }
        }

        /* Firefox < 16 */
        @-moz-keyframes fadein {
            from { opacity: 0; }
            to   { opacity: 1; }
        }

        /* Safari, Chrome and Opera > 12.1 */
        @-webkit-keyframes fadein {
            from { opacity: 0; }
            to   { opacity: 1; }
        }

        /* Internet Explorer */
        @-ms-keyframes fadein {
            from { opacity: 0; }
            to   { opacity: 1; }
        }

        /* Opera < 12.1 */
        @-o-keyframes fadein {
            from { opacity: 0; }
            to   { opacity: 1; }
        }}
    </style>
</header>
</html>

registrar:
(registrar.php)
PHP:
<?php
    include("db.php");

    if (isset($_POST['criar'])) {
        $nome = $_POST['nome'];
        $apelido = $_POST['apelido'];
        $email = $_POST['email'];
        $pass = $_POST['pass'];
        $data = date("Y/m/d");

        $email_check = mysql_query("SELECT email FROM users WHERE email='$email'");
        $do_email_check = mysql_num_rows($email_check);
        if ($do_email_check >= 1) {
            echo '<h3>Este email já está registado, faz o login <a href="login.php">aqui</a></h3>';
        }elseif ($nome == '' OR strlen($nome)<3) {
            echo '<h3>Escreve o teu nome corretamente!</h3>';
        }elseif ($email == '' OR strlen($email)<10) {
            echo '<h3>Escreve o teu email corretamente!</h3>';
        }elseif ($pass == '' OR strlen($pass)<8) {
            echo '<h3>Escreve a tua palavra-passe corretamente, deve ter mais que 8 caracteres!</h3>';
        }else{
            $query = "INSERT INTO users (`nome`,`apelido`,`email`,`password`,`data`) VALUES ('$nome','$apelido','$email','$pass','$data')";
            $data = mysql_query($query) or die(mysql_error());
            if ($data) {
                setcookie("login",$email);
                header("Location: ./");
            }else{
                echo "<h3>Desculpa, houve um erro ao registar-te...</h3>";
            }
        }
    }
?>
<!DOCTYPE html>
<html>
<head>
    <link href='https://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>
    <style type="text/css">
    *{font-family: 'Montserrat', cursive;}
    img{display: block; margin: auto; margin-top: 20px; width: 200px;}
    form{text-align: center; margin-top: 10px;}
    input[type="text"]{border: 1px solid #CCC; width: 250px; height: 25px; padding-left: 10px; border-radius: 3px; margin-top: 10px;}
    input[type="email"]{border: 1px solid #CCC; width: 250px; height: 25px; padding-left: 10px; border-radius: 3px; margin-top: 10px;}
    input[type="password"]{border: 1px solid #CCC; width: 250px; height: 25px; padding-left: 10px; margin-top: 10px; border-radius: 3px;}
    input[type="submit"]{border: none; width: 120px; height: 30px; margin-top: 20px; border-radius: 3px;}
    input[type="submit"]:hover{background-color: #1E90FF; color: #FFF; cursor: pointer;}
    h2{text-align: center; margin-top: 20px;}
    h3{text-align: center; color: #1E90FF; margin-top: 15px;}
    a{text-decoration: none; color: #333;}
    </style>
</head>
<body>
    <img src="img/logo.png"><br />
    <h2>Cria a tua conta</h2>
    <form method="POST">
        <input type="text" placeholder="Primeiro nome" name="nome"><br />
        <input type="text" placeholder="Apelido" name="apelido"><br />
        <input type="email" placeholder="Endereço email" name="email"><br />
        <input type="password" placeholder="Palavra-passe" name="pass"><br />
        <input type="submit" value="Criar uma conta" name="criar">
    </form>
    <h3>Já tens uma conta? <a href="login.php">Entra aqui!</a></h3>
</body>
</html>

login:
(login.php)
PHP:
<?php
    include("db.php");

    if (isset($_POST['entrar'])) {
        $email = $_POST['email'];
        $pass = $_POST['pass'];
        $verifica = mysql_query("SELECT * FROM users WHERE email = '$email' AND password='$pass'");
        if (mysql_num_rows($verifica)<=0) {
            echo "<h3>Palavra-passe ou e-mail errados!</h3>";
        }else{
            setcookie("login",$email);
            header("location: ./");
        }
    }
?>
<!DOCTYPE html>
<html>
<head>
    <link href='https://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>
    <style type="text/css">
    *{font-family: 'Montserrat', cursive;}
    img{display: block; margin: auto; margin-top: 20px; width: 200px;}
    form{text-align: center; margin-top: 20px;}
    input[type="email"]{border: 1px solid #CCC; width: 250px; height: 25px; padding-left: 10px; border-radius: 3px;}
    input[type="password"]{border: 1px solid #CCC; width: 250px; height: 25px; padding-left: 10px; margin-top: 10px; border-radius: 3px;}
    input[type="submit"]{border: none; width: 80px; height: 30px; margin-top: 20px; border-radius: 3px;}
    input[type="submit"]:hover{background-color: #1E90FF; color: #FFF; cursor: pointer;}
    h2{text-align: center; margin-top: 20px;}
    h3{text-align: center; color: #1E90FF; margin-top: 15px;}
    a{text-decoration: none; color: #333;}
    </style>
</head>
<body>
    <img src="img/logo.png"><br />
    <h2>Entra na tua conta</h2>
    <form method="POST">
        <input type="email" placeholder="Endereço email" name="email"><br />
        <input type="password" placeholder="Palavra-passe" name="pass"><br />
        <input type="submit" value="Entrar" name="entrar">
    </form>
    <h3>Ainda não tens conta? <a href="registar.php">Cria uma hoje!</a></h3>
</body>
</html>
 
Criar um campo na DB utilizadores: active et token comme disse o nunopatrao

Ao criar a conta generas um token aleatorio e metes o active a 0

Depois envias um email com link com o parametro token em GET

Depois tens de interpretar o link e mudar o campo active para 1..

Comme é obvio, ao fazer o login tens de ver se o active é 1 ou 0..

Na net deves encontrar codigos que tr ajudem de nao o souberes fazer..
 
Criar um campo na DB utilizadores: active et token comme disse o nunopatrao

Ao criar a conta generas um token aleatorio e metes o active a 0

Depois envias um email com link com o parametro token em GET

Depois tens de interpretar o link e mudar o campo active para 1..

Comme é obvio, ao fazer o login tens de ver se o active é 1 ou 0..

Na net deves encontrar codigos que tr ajudem de nao o souberes fazer..
Obrigado!
Encontrei estes dois:
https://code.tutsplus.com/tutorials/how-to-implement-email-verification-for-new-members--net-3824
https://code.tutsplus.com/tutorials/how-to-code-a-signup-form-with-email-confirmation--net-6860
 
Já agora.. algo mais simples:
Fazes um hash com o email e outra coisa qualquer, tipo: email|date(Y-m-d) (fazes codificação reversível, não um md5)
E mandas um email com esse hash.. sabes que esse hash vai ser valido naquele dia..
Quando o user for ao site www.xptp.com/345eg34vdfghe45/
Sacas o hash, descodificas e fazes explode por | .. Depois ves se o email existe e etc.. e se a data é valida

Fica so a minha dica para projetos simples :))

PS: a data é um exemplo, podes ate so usar o email para o hash.. isto porque imagina que o gajo regista-se as 5 para a meia noite e quando vai a ativar ja nao é valido porque ja é um novo dia..
 
Back
Topo