Joomla:如果用户未登录并返回自定义组件,则重定向到登录页面

时间:2014-09-04 07:21:03

标签: joomla joomla3.0

这就是我想要做的事情:我有一个自定义组件,在其中一个视图中,要求用户登录。如果他不是,现在,我只抛出一个异常,这真的很难看

所以我想将用户重定向到登录页面。这不是问题,我知道该怎么做。

BUT。肯定有一种方法可以在登录页面之后暂时“覆盖”默认重定向到用户想要查看的视图。事实上,例如,菜单项就是这样做的。问题是:我无法弄明白。有没有人知道如何覆盖登录页面的默认重定向仅适用于一个呼叫?

4 个答案:

答案 0 :(得分:9)

您不需要创建插件才能执行此操作。

com_user组件接受return参数,以了解登录后用户的发送位置。这完全用于您描述的情况:用户尝试访问受限区域,他被重定向到登录页面,然后返回到他之前尝试访问的页面。

为此,你做了@Brian所建议的,但略有改变:

$app = JFactory::getApplication();
$message = "You must be logged in to view this content";
$url = JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode('YOUR COMPONENT VIEW URL HERE')
$app->redirect($url, $message);

答案 1 :(得分:4)

有三种方法可以实现它。

  1. 如果您有自定义组件视图的菜单项,则菜单项页面中有一个选项为访问。只需选择已注册的选项即可。现在,当用户尝试访问该页面时,它将提示用户登录以查看该页面。 enter image description here

  2. 您可以创建plugin或从该页面加载的位置调用该插件。

  3. 或者您可以直接将此代码添加到您的视图,默认文件中。

  4. <?php
    $user = JFactory::getUser();
    if($user->id=='' || $user->id==NULL){
    // Your message here.
    }else{
    
    // Your code here
    }
    ?>
    

    希望这会给你一个想法。

答案 2 :(得分:2)

您可以创建一个插件,但有一种更优雅的方式可以使用后端或内联现有代码。

不要抛出异常,而是使用以下行:

JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_users&view=login', JText::_("You must be logged in to view this content"));

另一个选项是创建展示位置菜单参考。这是一个菜单组,未附加到模块并显示在网站上。它的使用有很多种原因,但在这种情况下,您将创建一个菜单引用并为其分配受限制的访问级别。

现在,如果您希望用户能够通过显示的菜单选项进行访问,您只需将公共引用转换为菜单别名的类型,并指向具有访问级别限制的展示位置菜单引用。

如果您只想使用嵌入式锚链接,可以使用放置菜单别名作为href属性来实现相同的结果。

让用户自动路由到登录页面。

我会使用这两个选项中的一个而不是用户插件。

答案 3 :(得分:0)

一段时间以来,我一直在使用接受的答案的解决方案,但是在最近的Joomla更新中,此操作停止了。 仔细研究一下,我发现隐私组件使用的内容略有不同,因此我只能推断出API有所更改。 我建议使用以下内容:

$url = JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode('YOUR COMPONENT VIEW URL HERE')
$this->setRedirect($url);
return $this;

如果要显示一条消息,请在退货之前分别设置该消息

$app = JFactory::getApplication();
$app->enqueueMessage("You must be logged in to view this content", "Notice");