我有一个我在joomla中构建的组件,我只想在组件是调用代理时才从其中呈现信息。
实施例: 我有一个网址http://domain.com/index.php?option=com_mycomp&view=myaccount 从那里我想有一个pop / overlay来呈现网址: http://domain.com/index.php?option=com_mycomp&view=mykey&user_id=123
我知道必须有一种方法只能让" mykey"从自身调用时的视图渲染,不允许直接访问。我已经查看了登录模块并使用了JHtml :: _(' form.token')。不确定这是否是最佳实践"实现这一目标的方法,或者甚至是否有效。
非常感谢任何帮助。
Joomla版本:3.3.3
答案 0 :(得分:0)
使用SSL,用户会话的登录验证和每个请求验证会话我会考虑最佳实践。 Joomla提供了一种显示表单标记字段的机制:
echo JHtml::_('form.token');
如果您需要将令牌附加到URL。当想要呈现HTML片段时,tmpl = componen参数很重要。这标志Joomla只渲染组件视图,否则你会得到你的整个网站;菜单,模块和所有后面:
echo JRoute::(JUri::root() . '?option=com_mycomponent&view=userscreen&tmpl=component&' . JUtility::getToken() . '=1');
在请求服务器端的另一端,使用上述路径作为示例,可以通过控制器接收:
class MineControllerUserScreen extends JControllerLegacy
{
public function display($cachable = false, $urlparams = array())
{
// Validate the session is valid, die if isn't
JRequest::checkToken() or die( JText::_( 'Invalid Token' ) );
// Load the current user object for the active session if needed
$user = JFactory::getUser();
// Load the Session object for further validation if needed
$session = JFactory::getSession();
// Load sanitized items from POST and GET
$jinput = JFactory::getApplication()->input;
$answer = $jinput->get('user_answer', null, 'string');
// You are satisfied this person is allowed to get this
parent::display($cachable, $urlparams);
}
}
此用例应在控制器内处理。上面的例子列出了许多可以从Joomla获取安全数据的选项,你可以使用它们;但是对于你的情况,我认为将现有的问题/答案作为POST变量请求,并通过令牌和用户验证都可以解决问题。
这是关于安全编码指南的一般Joomla文档。