我正在尝试在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);
}
我认为这可以按照我的预期运作,但我不确定如何测试它。任何想法都将不胜感激。
提前致谢