Joomla组件开发(3.3.3版)
Posted
技术标签:
【中文标题】Joomla组件开发(3.3.3版)【英文标题】:Joomla component development (version 3.3.3) 【发布时间】:2014-10-17 08:36:40 【问题描述】:我有一个正在 joomla 中构建的组件,我只想在该组件是调用代理时从该组件呈现信息。
示例: 我有一个网址http://domain.com/index.php?option=com_mycomp&view=myaccount 从那里我想要一个呈现url的pop/overlay: http://domain.com/index.php?option=com_mycomp&view=mykey&user_id=123
我知道必须有一种方法只让“mykey”视图在从自身调用时呈现,并且不允许直接访问。我查看了登录模块并使用了 Jhtml::_('form.token')。不确定这是否是实现这一目标的“最佳实践”方式,或者这是否可行。
非常感谢任何帮助。
Joomla 版本:3.3.3
【问题讨论】:
澄清一下,你想确保用户不能直接在浏览器中输入你的覆盖/弹出的 URL 来访问视图? 是的,没错。自从我发布了这个我已经实现了一个检查用户状态变量的版本,我仍然不确定这是最佳实践。我不能使用 acl bc 它不是基于用户分组,而是基于用户是否输入了对上一个问题的正确答案。 【参考方案1】:使用 SSL,对用户会话进行登录验证并验证每个请求的会话,我认为这是最佳实践。 Joomla 提供了一种显示表单令牌字段的机制:
echo JHtml::_('form.token');
如果您需要将令牌附加到 URL。当想要呈现 HTML sn-ps 时,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 文档。
http://docs.joomla.org/Secure_coding_guidelines
【讨论】:
以上是关于Joomla组件开发(3.3.3版)的主要内容,如果未能解决你的问题,请参考以下文章