Opencart Force登录

时间:2013-12-03 17:38:07

标签: redirect login opencart

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

如果我在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'));
}

提前感谢您的帮助。

马特

4 个答案:

答案 0 :(得分:1)

假设您要检查商店是否也是子域名,您应该使用类似这样的代码

// 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'));
        }
    }
}

答案 1 :(得分:1)

另一种可能性是创建 preAction - 例如喜欢维护模式。我曾经使用过这个,我认为这比在视图模板中实现它更清晰(因此它遵循MVC模式 - 逻辑在控制器中完成,视图仅用于呈现数据和收集来自用户的输入)。

创建课程catalog/controller/common/login.php

class ControllerCommonLogin extends Controller {

    public function index() {
        if($this->config->get('config_store_id') == 1) { // if desired store, continue checking

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

}

然后打开index.php(前端一个)并找到行:

// Maintenance Mode
$controller->addPreAction(new Action('common/maintenance'));

后添加:

// Login needed pre-action
$controller->addPreAction(new Action('common/login'));

你应该完成。

答案 2 :(得分:0)

您需要添加以下条件:

 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'] - 这将为您提供当前页面路径。

答案 3 :(得分:0)

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