确保随机密钥是唯一的(测试理念)

时间:2016-01-04 21:11:45

标签: php mysql doctrine symfony-1.4

我正在尝试在symfony 1.4应用程序中登录时实现一个唯一的令牌。

我认为这样可行但我不确定如何测试它,而不仅仅是投入生产。

这是我到目前为止的实现。

// make sure that the key is not in the database on signin    
    do {
        // generate new keys
        $key = $this->generateRandomKey();
        // make sure random key is not used
        $key_check = Doctrine::getTable('sfGuardUserProfile')->checkDuplicateKey($key);    
    } while (count($key_check) < 1);
    ## miss this in original question
    Doctrine_Query::create()
              ->update('sfGuardUserProfile u')
              ->set('u.token_id', '?', $key)
              ->where('u.id = ?', $user->getId())
              ->execute();

随机函数

private function generateRandomKey($len = 20)
  {
    return base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
  }

static public function checkDuplicateKey($key) 
    {
        return Doctrine_Query::create()
            ->select('u.token_id')
            ->from('sfGuardUserProfile u')
            ->where('u.token_id = ?')
            ->fetchOne(array($key), Doctrine::HYDRATE_ARRAY);
    }

我认为这可以按照我的预期运作,但我不确定如何测试它。任何想法都将不胜感激。

提前致谢

0 个答案:

没有答案