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

问题描述 投票:4回答:4

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

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

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

joomla joomla3.0
4个回答
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);

4
投票

有3种方法可以实现它。

  1. 如果您有自定义组件视图的菜单项,则菜单项页面中有一个选项作为Access。只需选择已注册的选项即可。现在,当用户尝试访问该页面时,它将提示用户登录以查看该页面。
  2. 您可以创建一个plugin或从该页面加载的地方调用该插件。
  3. 或者您可以直接将此代码添加到您的视图,默认文件中。
<?php
$user = JFactory::getUser();
if($user->id=='' || $user->id==NULL){
// Your message here.
}else{

// Your code here
}
?>

希望这会给你一个想法。


2
投票

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

使用以下行代替抛出异常:

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

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

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

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

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

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


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");
© www.soinside.com 2019 - 2024. All rights reserved.