Скочи на садржај

Функционалност ресетовања заборављене лозинке

Код свих постојећих веб сервиса који захтевају креирање корисничких профила, једна од незаобилазних функционалности је ресетовање заборављене лозинке. Тако се и код апликације за ћаскање мора обезбедити ова могућност уколико неко од корисника заборави лозинку. Други разлог због ког је потребна ова могућност је свакако безбедност. Негде је препорука, а негде обавеза да се периодично мењају лозинке управо због одржавања нивоа безбедности како налога тако и саме апликације односно у општем смислу система који користимо.

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

Корак 1 – унос мејл адресе

Делује тривијално, али је неопходно. За унету мејл адресу се најпре проверава да ли постоји такав запис у бази. Тек када се утврди да постоји, шаље се верификациони код на адресу електронске поште и прелази на наредни корак.

Корак 2 – верификација налога

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

Корак 3 – унос нове лозинке / промена лозинке

Након прва два корака, коначно смо дошли до форме за ресетовање лозинке. У два поља за лозинку морама се унети иста лозинка. Ово је у суштини још један вид логичке контроле корисничког уноса. Након успешне промене корисник ће бити одведен на страницу пријаве, одакле ће моћи поново да приступи ћаскању.

Уз нове скриптове који омогућавају ову функционалност, највеће измене су претрпеле скрипта за верификацију (verify.php и verify.js). У њима је смештена читава логика око контроле саобраћаја, да се тако изразим. Разликује два могућа сценарија, регистрацију и ресетовање и у складу са тим шаље на одговарајуће странице. Ово се постиже помоћу променљивих смештених у сесију.

Део скрипта verify.php који је претрпео измене

if ($otp == $row['code']) {
  $code = 0;
  if ( $_SESSION['action'] == 'activate' ) {
    $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 activating";
    } else {
       echo "Ups! Something went wrong with the query! Error: ". mysqli_error($conn);
    }
  } else if ( $_SESSION['action'] == 'reset' ) {
    $sqlPassReset = "UPDATE users SET code = $code WHERE email = '{$_SESSION['email']}'";
    $queryPassReset = mysqli_query( $conn, $sqlPassReset );
    if ( $queryPassReset ) {
      $_SESSION['email'] = $row['email'];
      echo "success reseting";
    } else {
      echo "Ups! Something went wrong with the reset query! Error: ". mysqli_error($conn);
    }
  } else {
    echo 'Unknown action';
  }
}

Закључак

На почетку имплементације ове функционалности мислио сам да је то посао од 10 минута. Потценио сам противника и 10 минута се развукло на неколико сати и два покушаја 🙂 Код првог покушаја се упорно позивао погрешан скрипт код верификације, па верификација није радила. Сва срећа, ту је био Гит да ме спасе. Вратио сам се корак у назад и исписао потребне скриптове поново. Овај пут је било мало баговито, али ни приближно лоше као први покушај. Јако битна поука – Никад не пиши код у полубудном стању! Дакле, сада ресетовање лозинке фунцкионише и део је апликације!

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