Као једно од унапређења апликације за ћаскање, у претходном тексту сам навео могућност верификације мејла и као логичан след ствари активирање налога који је креиран у кораку регистрације. Сам механизам није компликован, захтевао је додатне две колоне у табели корисника, као и додатну страницу за верификацију са пратећим позадинским процесима верификације и активирања. У овом тексту бавићу се овом темом.
Измена постојеће табеле у бази података
Као први корак навео сам додавање још две колоне у табели корисника. У једној се чува код за активацију, док се у другој налази статус налога. Код је шестоцифрени насумични број који се генерише током процеса регистрације. Подразумевана вредност за статус налога је 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@nenadsky.com"; 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-енд енкрипција, за максималну заштиту података и приватности – Панки, Трле, хвала за идеју! 🙂