Redirect Opencart强制登录

Redirect Opencart强制登录,redirect,login,opencart,Redirect,Login,Opencart,如果客户没有从网站的任何页面登录,我想将其重定向到登录页面。我试图将对子域的访问限制为特定的客户组,而我的其余代码可以正常工作 如果我在home.tpl上使用以下代码,它就会工作 if (!$logged) { $this->redirect($this->url->link('account/login', '', 'SSL')); } 但是如果我把它放在标题中(因此它会对每个页面做出反应),我会得到一个重定向循环,因为它会尝试将实际登录页面重定

如果客户没有从网站的任何页面登录,我想将其重定向到登录页面。我试图将对子域的访问限制为特定的客户组,而我的其余代码可以正常工作

如果我在home.tpl上使用以下代码,它就会工作

 if (!$logged) { 
        $this->redirect($this->url->link('account/login', '', 'SSL'));
    }
但是如果我把它放在标题中(因此它会对每个页面做出反应),我会得到一个重定向循环,因为它会尝试将实际登录页面重定向到它自己

有没有正确的说法:

if ($this->url->link != 'account/login') {
    $this->redirect($this->url->link('account/login', '', 'SSL'));
}
提前感谢你的帮助


Matt

您需要添加如下条件:

 if($this->config->get('config_store_id') == 1) { //Add your subdomain store id, if you want to limit the condition for a subdomain. 

      if( (!isset($this->request->get['route']) || $this->request->get['route'] != 'account/login' ) && (!$this->customer->isLogged()) ){
         $this->redirect($this->url->link('account/login', '', 'SSL'));
      }
 }

$this->request->get['route']
-这将为您获取当前页面路径。

假设您想检查存储也是子域存储,您应该使用类似以下的代码

// Check store ID against subdomain store id value
if($this->config->get('config_store_id') == 123) {

    // Check customer isn't logged in
    if(!$this->customer->isLogged()) {

        // Redirect if route isn't account/login
        if(empty($this->request->get['route']) || $this->request->get['route'] != 'account/login') {
            $this->redirect($this->url->link('account/login', '', 'SSL'));
        }
    }
}

另一种可能是创建一个预操作-例如,类似维护模式。我曾经使用过它,我认为这是一个比在视图模板中实现更干净的解决方案(因此它遵循MVC模式-逻辑在控制器中完成,视图仅用于显示数据和收集用户输入)

创建一个类
catalog/controller/common/login.php

class ControllerCommonLogin扩展控制器{
公共职能指数(){
如果($this->config->get('config\u store\u id')==1){//如果需要存储,请继续检查
如果(!$this->customer->isLogged()){//检查用户是否未登录
if(空($this->request->get['route'])| |$this->request->get['route']!='account/login'){//如果路由不是account/login,则重定向
$this->redirect($this->url->link('account/login','SSL');
}
}
}
}
}
然后打开
index.php
(前端一)并找到行:

//维护模式
$controller->addPreAction(新操作('common/maintenance');
之后添加以下内容:

//登录需要预先操作
$controller->addPreAction(新操作('common/login'));

应该这样做。

我建议检查您是否已经在登录页面上,如果已经在登录页面上,请不要运行代码。如果在名为login.php的页面上显示,则可以检查这一点。简单而干净的解决方案

让您知道我的代码是:+1的可能重复-这应该作为一个预操作来完成,就像Opencart 2.0的管理区域一样,用$This->response->redirect($This->url->link('account/login')替换重定向行;