Верификација мејла и активирање налога

Као једно од унапређења апликације за ћаскање, у претходном тексту сам навео могућност верификације мејла и као логичан след ствари активирање налога који је креиран у кораку регистрације. Сам механизам није компликован, захтевао је додатне две колоне у табели корисника, као и додатну страницу за верификацију са пратећим позадинским процесима верификације и активирања. У овом тексту бавићу се овом темом.

Странице апликације за ћаскање

Измена постојеће табеле у бази података

Као први корак навео сам додавање још две колоне у табели корисника. У једној се чува код за активацију, док се у другој налази статус налога. Код је шестоцифрени насумични број који се генерише током процеса регистрације. Подразумевана вредност за статус налога је NULL. Процесом верификације и активације ова поља се мењају и то тако да се првој вредности додељује 0, док се друга вредност из NULL мења у 1 (налог активан).

Структура табеле корисника након измене

Верификација мејла

Као што је речено, при регистрацији се генерише код за активацију. Унети подаци из форме за регистрацију се заједно са кодом, након провере, уписују у табелу корисника. Статус налога који је представљен пољем „verification_status“ се поставља на подразумевану вредност NULL. Након тога се шаље мејл кориснику са активационим кодом. Наравно мејл може бити и опширнији, али је за ове потребе сасвим довољан.

Део кода о којем говорим је:

 // create secure password hash
 $pass = password_hash($password, PASSWORD_DEFAULT);
 $code = rand(999999, 111111);

 $insertQuery = mysqli_query($conn, "INSERT INTO 
      users (unique_id, fname, lname, email, password, img, status, code) 
      VALUES ({$random_id}, '{$fname}', '{$lname}', '{$email}', '{$pass}', '{$new_img_name}', '{$status}', {$code})");

 if ($insertQuery) {
    $sql3 = mysqli_query($conn, "SELECT * FROM users WHERE email = '{$email}'");
    if (mysqli_num_rows($sql3) > 0) {
        $row = mysqli_fetch_assoc($sql3);
        $subject = "Email Verification Code";
        $message = "Your verification code is $code";
        $sender = "From: [email protected]";
        if(mail($email, $subject, $message, $sender)){
            $_SESSION['email'] = $row['email'];
            echo 'success';
        }else{
            echo "Failed while sending code!";
        }
   }
}

Активација налога

Након регистрације, корисник ће бити прослеђен на страницу верификације. Овде је потребно унети код који је претходно послат мејлом на адресу коју је корисник унео. Након унетог кода и клика на дугме верификације, проверава се исправност кода који је везан за дату мејл адресу. Уколико је све у реду, врши се промена вредности поља „verification_status“ у вредност 1 (значи да је корисник активан), потом поље „status“ у вредност „Active now!“ док се у поље кода поништава та вредност и уписује 0. Након тога корисник може да се пријави на ћаскање. Наравно, уколико неко покуша да се пријави без активације, биће аутоматски пребачен на страницу верификације.

$code = 0;
$verStatus = 1;
$status = 'Active now!';
$sqlAccountActivation = "UPDATE users SET status = '{$status}', code = {$code}, verification_status = {$verStatus} WHERE code = {$otp} AND email = '{$_SESSION['email']}' ";
$queryAccountActivation = mysqli_query($conn, $sqlAccountActivation);
if ( $queryAccountActivation ) {
    $_SESSION['unique_id'] = $row['unique_id'];
    echo 'success';
} else {
    echo 'Ups! Something went wrong with the query! Error: '. mysqli_error($conn);
}

За крај да поменем још једну битну ствар. Корисничке лозинке се најпре енкриптују и потом такве уписују у базу – безбедност пре свега 🙂 Код којим се то постиже је:

$pass = password_hash($password, PASSWORD_DEFAULT);

Уграђена функција ПХПа која дати стринг (лозинку – $password) енкриптује алгоритмом који се дефинише као други параметар функције.

Још једна идеја се изродила током рада на овом, а то је енд-2-енд енкрипција, за максималну заштиту података и приватности – Панки, Трле, хвала за идеју! 🙂

Линкови

ГитХаб, Цукуће (апликација)

sr_RSСрпски језик
Powered by TranslatePress »