首页 文章

你能改变Opencart重置你的passwod的方式吗?

提问于
浏览
0

每当客户忘记密码时,他们会转到他们只需输入电子邮件地址的页面,然后使用新密码发送电子邮件,该密码只是一堆随机字符 . 我从未见过任何其他购物车这样做,所以这很奇怪 . 大多数购物车都会发送一封电子邮件,其中包含您点击它的链接然后重置它 . 有没有人看到像Opencart这样做的扩展?我目前正在使用Joomla 3.3.0和Opencart 2.3.0 . 谢谢!

3 回答

  • 0

    在opencart中,有一个默认方法可以通过将第三个参数传递给 /system/library/customer.php::login() 来覆盖登录,因为您需要电子邮件

    因此,如果你想发送密码重置链接只需修改邮件和发送链接,你也需要电子邮件,并确保你加密电子邮件ID安全 /catalog/controller/account/forgotten.php 之前$ mail

    $encemail = substr(sha1('?h,KqTn+D#}o'.$this->request->post['email']),0,20);
    $url = $this->url->link('account/password','passkey='.$encemail,'SSL');
    
    $subject = sprintf($this->language->get('text_subject'), $this->config->get('config_name'));
    $message  = sprintf($this->language->get('text_greeting'), $this->config->get('config_name')) . "\n\n";
    $message .= 'click on link to change password' . "\n\n";
    $message .= $url;
    

    现在,当客户点击链接时,它将重定向到更改密码页面,因此我们需要在 /catalog/controller/account/password.php 上通过密码查找关于电子邮件ID的信息

    if (!$this->customer->isLogged()) {
    
        if(isset($this->request->get['passkey'])){
            $this->load->model('account/customer');
            $data = array(
                'key' => '?h,KqTn+D#}o',
                'passkey' => $this->request->get['passkey']
                );
    
            $email = $this->model_account_customer->getEmail($data);
    
            if ($email) {
                $this->customer->login($email['email'], '', true);
            }else{
                $this->session->data['redirect'] = $this->url->link('account/password', '', 'SSL');
                $this->redirect($this->url->link('account/login', '', 'SSL'));                  
            }
    
        }else{
    
            $this->session->data['redirect'] = $this->url->link('account/password', '', 'SSL');
            $this->redirect($this->url->link('account/login', '', 'SSL'));
        }
    }
    

    现在在上面我们调用了一个模型函数来通过passkey查找有效的电子邮件,所以在_1197866中添加一个新函数

    public function getEmail($data){
    $query = $this->db->query("SELECT email FROM " . DB_PREFIX . "customer WHERE SUBSTRING(sha1(CONCAT('" . $data['key'] . "',`email`)),1,20) = '" . $data['passkey'] ."' AND status = '1' AND approved = '1'");
    return $query->row;
    }
    

    祝好运

  • 4

    好的,我刚刚找错了地方 . 我正在为Opencart寻找这个解决方案但实际上我发现你可以在用户登录页面上使用Joomla 3的默认“忘记密码”链接 .

    您可以在www.yoursite.com/index.php?option=com_users&lang=en&view=login找到此链接,然后您将看到“忘记密码”链接 . 执行此操作时,它将更改Joomla用户的密码和Opencart客户的密码 . 所以我只是将Opencart的“Forgot Password”链接重定向到Joomla . 作品完美!谢谢你的帮助!

  • -1

    使用用户名“admin”编辑用户,并将密码字段更改为5f4dcc3b5aa765d61d8327deb882cf99 . 此字符串或散列将密码更改为“密码”(不带引号)

    你可以参考

    http://www.inmotionhosting.com/support/edu/opencart/339-how-to-reset-my-opencart-admin-password

相关问题