Joomla用户注册成功后会发一封激活的邮件,这封邮件的超链接是这个样子的:

index.php?option=com_users&task=registration.activate&token= token

从连接中我们可以看到它是调用的 users 组件 registration 控制器的 activate 方法。

在 activate 方法里面有一堆验证的判断,经过分析有用的就三行:

$model = $this->getModel('Registration', 'UsersModel');//获取model
$token = $input->getAlnum('token');//获取token
$return = $model->activate($token);//激活用户

我们看一下 UsersModelRegistration 对象的代码:

//首先是验证用户的token
$query = $db->getQuery(true);
$query->select($db->quoteName('id'))
    ->from($db->quoteName('#__users'))
    ->where($db->quoteName('activation') . ' = ' . $db->quote($token))
    ->where($db->quoteName('block') . ' = ' . 1)
    ->where($db->quoteName('lastvisitDate') . ' = ' . $db->quote($db->getNullDate()));
$db->setQuery($query);
$userId = (int) $db->loadResult();
//然后是激活用户,解除锁定
$user = JFactory::getUser($userId);
$user->set('activation', '');
$user->set('block', '0');
$user->save();