Ndodheni ne: Guidat / JavaScript
Kontrollues i Fortesise se Fjalekalimeve me JQuery

Kontrollues i Fortësisë së Fjalëkalimeve me JQuery

Nga më 8 April 2010 në JavaScript me 0 Komente

Sa do të sigurta aplikacionet që krijojmë, mbetet problemi i ndërgjegjshmërisë së vizitorëve për të përdorur fjalëkalime komplekse. Në këtë guidë do ju tregoj një teknikë interesante për ti informuar vizitorët se sa të sigurtë janë fjalëkalimet e tyre.

  • Shkarko Kodin
  • Shiko Demon

Siguria e aplikacioneve web është rritur vitet e fundit si pasojë e përmirësimit të teknologjisë dhe pëfitimit të një eksperience shumë vjeçare. Enkriptimi me SSL, kthimi i fjalëkalimit në hash kriptografik dhe mbrojtja e përgjithshme e aplikacionit nga sulmet standarte (edhe jo) janë vetëm disa nga masat e sigurisë. Megjithatë, sa do i sigurt aplikacioni, në lojë futet edhe përgjegjshmëria e vizitorëve për të vendosur fjalëkalime të forta, të cilat mund të varjojnë nga fjalë të thjeshta fjalori në 20 gërma kombinime abstrakte.

Qëllimi i kësaj guide të shkurtër (por praktike) është të ndërtojmë një mënyrë vizuale për ta informuar vizitorin rreth fortësisë së fjalëkalimit. Hera e parë që kam rastisur në një paraqitje të tillë ka qenë kur u regjistrova në Google Mail (paraqitur më poshtë) dhe mu duk zgjidhje shumë e mirë. Më pas teknika morri moment dhe u implementua edhe në shumë faqe të tjera. Unë do ju tregoj si të ndërtoni një matës fortësie të ngjashëm me Google Mail, por [besoj] më interesant dhe me më shume nivele fortësie.

gmail fjalekalimi

Fjalëkalimi në GMail

Para se të filloj, më lejoni t’ju shpjegoj logjikën e thjeshtë të matësit. Gjithçka bazohet në disa nivele fortësie të cilët rriten në bazë të kushteve të vendosura. Pasja e një gërme të madhe, një simboli, një numri dhe gjatësia më e madhe se 12 karaktere janë faktorët që rrisin nivelet e fortësisë.

Do ta nis guidën me kodin HTML që strukturon fushën e fjalëkalimit dhe bën gjithçka gati për tu ngjyrosur e pozicionuar me CSS.

 HTML |  Kopjo Kodin |? 
1
<label for="fjalekalimi">Fjalekalimi</label>
2
<input type="text" name="fjalekalimi" id="fjalekalimi" />
3
<br /><br />Fortesia: <span id="teksti"></span>
4
<div id="fortesia">
5
     <div id="progresi"></div>
6
</div>

Kodi nuk ka asgjë të veçantë, por më duhet t’ju shpjegoj disa gjëra të thjeshta. <span id=”teksti”> është elementi i cili do të mbajë shkrimin e fortësisë (psh: I Fortë, I Dobët, etj). <div id=”fortesia”> është mbajtësi i progresit, ndërsa <div id=”progresi”> është elementi që do të tregojë progresin duke u zmadhuar dhe zvogëluar në gjerësi. Një gjë që duhet të theksoj është fakti se kam përdorur <input type=”text”> në vend të <input type=”password”>. E vetmja arsye është që fjalëkalimi të shihet në mënyrë që të eksperimentoni me nivelet e ndryshme të fortësisë, por në një projekt real duhet të përdorni <input type=”password”>.

Për ta bërë të bukur paraqitjen e elementëve do të shkruajmë disa rregulla të thjeshta në CSS.

 CSS |  Kopjo Kodin |? 
01
label{
02
     display:block;
03
}
04
 
05
input#fjalekalimi{
06
     border:1px solid #aaa;
07
     width:200px;
08
     padding:5px;
09
}
10
 
11
span#teksti{
12
     color:#09c; /* Teksti i fortesise e ka ngjyren blu */
13
}
14
 
15
div#fortesia{
16
     width:210px;
17
     border:1px solid #ddd;
18
}
19
 
20
div#progresi{
21
     height:10px;
22
     background-color:#09c; /* Indikuesi i progresit e ka sfondin blu */
23
     width:0%; /* dhe eshte 0% i gjere per mos tu shfaqur */
24
}
25
 
26
/* Nje klase qe do te aktivizohet kur te ndodhe gabim */
27
div#progresi.problem{
28
     background-color:red;
29
}
30
 
31
/* Nje klase qe do te aktivizohet kur te ndodhe gabim */
32
span#teksti.problem-teksti{
33
     color:red;
34
}

Tashmë kemi punuar me paraqitjen dhe kemi bërë gjithçka gati për të kaluar në kodin JavaScript. Kodi (që vijon më poshtë) është i komentuar mirë, megjithatë më duhet t’ju tregoj logjikën e thjeshtë që fuqizon këtë kontrollues fortësie. Kam krijuar një funksion i cili është lidhur me eventin keyup() në mënyrë që të egzekutohet sa herë që në fjalëkalim shtohet një karakter. Gjëja e parë që kryhet është të kontrollohet nëse fjalëkalimi është nën 6 karaktere, ku matësi i fortësisë çaktivizohet duke u bërë i kuq dhe shfaqet një mesazh gabimi. Kur fjalëkalimi është mbi 6 karaktere, automatikisht fortësia fiton një pikë dhe vazhdohet me kontrollin e niveleve të tjera. Me Regular Expressions kontrollohet nëse fjalëkalimi përmban gërma të mëdha, numra apo simbole dhe i shtohet një pikë fortësisë për çdo kusht të plotësuar. Edhe nëse fjalëkalimi është më i gjatë se 12 karaktere është një pikë tjetër. Në fund, pikët mblidhen dhe në bazë të tyre shfaqet mesazhi dhe progresi. Shpresoj që shpjegimi teorik të ketë sens, por kuptohet që kodi do ju tregojë si gjithçka funksionin në praktikë.

 Javascript |  Kopjo Kodin |? 
001
$(document).ready(function(){
002
     /*
003
     Per te thjeshtesuar kodin, deklarojme variablat te cilat
004
     i drejtohen elementeve html. $() eshte menyra e shkurtuar
005
     e JQuery per document.getElementById().
006
     */
007
     var fjalekalimi = $('#fjalekalimi');
008
     var fortesia = $('#fortesia');
009
     var teksti = $('#teksti');
010
     var progresi = $('#progresi');
011
 
012
     var minimumi = 6; //Numri minimal i karaktereve per fjalekalimin
013
     var germa = 0; //Do aktivizohet kur numri i karaktereve te jete >12
014
     var germaMedha = 0; //Do aktivizohet kur te gjendet nje germe e madhe
015
     var numra = 0; //Do aktivizohet kur te gjendet nje numer
016
     var simbole = 0; //Do aktivizohet kur te gjendet nje simbol
017
     var totali = 0; //Do na sherbeje per te mbledhur totalin e 4 prej variablave me siper
018
 
019
     function shfaqFortesine(){
020
          /*
021
          Kontrollojme nese gjatesia e fjalekalimit eshte me e vogel se
022
          vlera e percaktuar ne variabel.
023
          */
024
          if(fjalekalimi.val().length < minimumi){
025
               /*
026
               Elementit 'progresi' i shtojme klasen 'problem' permes funksionit
027
               addClass() e cila e ben sfondin e kuq. Gjithashtu e bejme gjeresine
028
               e elementit 100% ne menyre qe te shfaqet i teri (default ne css eshte
029
               vendosur 0) me funksionin css().
030
               */
031
               progresi.addClass('problem');
032
               progresi.css('width', '100%')
033
 
034
               /*
035
               Ashtu si tek progresi, edhe tekstit i shtojme klasen 'problem-teksti' ne
036
               menyre qe ngjyra e tekstit te behet e kuqe. Me funksionin html() - shkurtimi
037
               i JQuery per innerHTML() - shfaqim mesazhin e gabimit.
038
               */
039
               teksti.addClass('problem-teksti');
040
               teksti.html('Me pak se 6 karaktere');
041
               /*
042
          Kodi me poshte do te egzekutohet kur numri i karaktereve te jete
043
          me i madh se numri i vendosur ne variabel.
044
          */
045
          } else{
046
               /*
047
               Ja heqim klasat e gabimit elementeve ne menyre qe te kthehen
048
               ne ngjyrat origjinale (blu, te vendosura me CSS).
049
               */
050
               progresi.removeClass('problem');
051
               teksti.removeClass('problem-teksti');
052
 
053
               /*
054
               Kater rreshtat e meposhtem jane matesit e fortesise. Me funksionin match() kerkojme
055
               nese Regular Expression i vendosur perkon me tekstin. Nese po, atehere variabla e duhur
056
               behet 1, perndryshe kthehet ne 0. Rreshti i fundit thjeshte kontrollon nese gjatesia e
057
               tekstit eshte me e madhe se 12, gje qe i shton nje tjeter pike fortesise.
058
               [A-Z] kontrollon nese teksti permban germa te medha.
059
               [0-9] kontrollon nese teksti permban numra.
060
               (.*[!,@,#,$,%,^,&amp;,*,?,_,~]) kontrollon nese teksti permban simbole.
061
               */
062
               if(fjalekalimi.val().match(/[A-Z]/g)){ germaMedha = 1; } else{ germaMedha = 0; }
063
               if(fjalekalimi.val().match(/[0-9]/g)){ numra = 1; } else{ numra = 0; }
064
               if(fjalekalimi.val().match(/(.*[!,@,#,$,%,^,&amp;,*,?,_,~])/)){ simbole = 1; } else{ simbole = 0; }
065
               if(fjalekalimi.val().length > 12){ germa = 1; } else{ germa = 0; }
066
 
067
               /*
068
               Mbledhim shumen e te gjitha variablave te kontrollit dhe e kalojme
069
               ne variablen 'totali'. Vlera e variablave te kontrollit eshte ose 1,
070
               ose 0, prandaj shuma minimale eshte 0 (fortesi minimale), ndersa shuma
071
               maksimale eshte 4 (fortesi maksimale).
072
               */
073
               totali = germaMedha + numra + simbole + germa;
074
               /*
075
               Ketu kam bere nje llogaritje te vogel per te shfaqur ne menyre dinamike
076
               progresin e fortesise duke levizur gjeresine e elementit 'progresi'.
077
               Duke filluar nga 0 deri ne 4 kemi 5 nivele fortesie, ndersa progresi eshte 100%.
078
               Pra 100%/5 nivele = 20% per nivel. Per nivelin 0 mendova qe progresi te shkoje
079
               ne 25% dhe jo 0%, ne menyre qe te behet diferenca midis fjalekalimit qe nuk i
080
               ploteson numrin minimal te karaktereve dhe atij qe i ploteson. Permes llogaritjes
081
               se meposhtme: totali*20+20 +'%' kemi keto raste te mundshme:
082
               totali = 0 => 0*20+20 = 20% (fortesi minimale)
083
               totali = 1 => 1*20+20 = 40%
084
               totali = 2 => 2*20+20 = 60%
085
               totali = 3 => 3*20+20 = 80%
086
               totali = 4 => 4*20+20 = 100% (fortesi maksimale)
087
               */
088
               progresi.css('width', totali * 20 + 20 + '%');
089
 
090
               /*
091
               Ne baze te vleres se variables 'totali' percaktohet edhe fortesia
092
               e fjalekalimit (min:0, maks:4). Shfaqim mesazhet e duhura sipas
093
               nivelit te caktuar, nga 'I Dobet' deri ne 'Ekstrem!'.
094
               */
095
               if(totali == 0){ teksti.html('I Dobet'); }
096
               else if(totali == 1){ teksti.html('Mesatar'); }
097
               else if(totali == 2){ teksti.html('I Forte'); }
098
               else if(totali == 3){ teksti.html('Super i Forte'); }
099
               else if(totali == 4){ teksti.html('Ekstrem!'); }
100
          }
101
     }
102
 
103
     /*
104
     Lidhim eventin keyup() me funksionin shfaqFortesine(). Ne momentin qe
105
     nje taste do te shtypet, funksioni do therritet per te shfaqur rezultatin
106
     ne kohe reale.
107
     */
108
     fjalekalimi.keyup(shfaqFortesine);
109
});

Kodi JavaScript mund të jetë pak “friksues” për fillestarët (komentet e zgjasin edhe më tepër), por ju siguroj që nuk ka asnjë shkencë. Thjeshtë kam krijuar një algoritëm i cili skanon tekstin dhe përcakton nivelin e fortësisë në bazë të përmbajtjes së tij dhe rezultatin e shfaq duke manipuluar disa elementë. Kodi mund të përdoret copy-paste për projekte të ndryshme, por do ju këshilloja të eksperimentoni disi e ndoshta të krijoni një algoritëm tuajin apo ta modifikoni tërësisht mënyrën e shfaqjes së fortësisë. JQuery është një librari shumë e fuqishme dhe e thjeshtë në të njëjtën kohë, me të cilën mund të bëni çfarëdo ju tregon fantazia.

Mësim të mbarë.

Fadion Dashi

Fadioni është prej shumë vitesh i apasionuar pas internetit dhe punon freelance si dizenjues dhe programues per web. Kur nuk është duke punuar, i pëlqen të shkruajë, të fotografojë, të admirojë koleskionin e tij të aparatëve fotografikë manualë dhe të kalojë kohë të bukur me miqtë.

Shkruaj një Koment