File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77 class User {
88 private static function generateTokenCode () {
99 $ digits = 6 ;
10+
11+ self ::cleanupTokens ();
12+ $ existingTokens = self ::getExistingVerifyTokens ();
13+
1014 $ code = random_int (0 ,1000000 );
1115 $ code = str_pad ($ code , $ digits , '0 ' , STR_PAD_LEFT );
16+
17+ while (in_array ($ code , $ existingTokens )) { // make sure we have no collissions;
18+ $ code = random_int (0 ,1000000 );
19+ $ code = str_pad ($ code , $ digits , '0 ' , STR_PAD_LEFT );
20+ }
21+
1222 return $ code ;
1323 }
1424
@@ -331,4 +341,14 @@ public static function cleanupTokens() {
331341 ':now ' => $ now ->getTimestamp ()
332342 ]);
333343 }
344+
345+ public static function getExistingVerifyTokens () {
346+ Db::connect ();
347+ $ query = Db::$ pdo ->prepare (
348+ 'SELECT code FROM verify '
349+ );
350+ $ query ->execute ();
351+ $ existingTokens = $ query ->fetchAll ();
352+ return $ existingTokens ;
353+ }
334354 }
Original file line number Diff line number Diff line change @@ -333,16 +333,11 @@ public function testCleanup() {
333333 "hello " => "world " ,
334334 "expires " => time () - 10
335335 ]);
336- $ token2 = User::saveVerifyToken ("verify " , [
337- "hello " => "world " ,
338- "expires " => time () - 10
339- ]);
340336 $ query = Db::$ pdo ->prepare ('SELECT count(*) AS count FROM verify ' );
341337 $ query ->execute ();
342338 $ result = $ query ->fetchAll ();
343339 $ beforeCleanup = $ result [0 ]['count ' ];
344- $ this ->assertEquals (2 , $ beforeCleanup );
345-
340+ $ this ->assertEquals (1 , $ beforeCleanup );
346341 User::cleanupTokens ();
347342 $ query = Db::$ pdo ->prepare ('SELECT count(*) AS count FROM verify ' );
348343 $ query ->execute ();
You can’t perform that action at this time.
0 commit comments