我们如何跟踪getHash函数的类型请求?

时间:2012-08-07 09:19:59

标签: php magento

我创建了一个模块,它正确地覆盖了magento哈希函数。 但问题是,我想检查一些条件。

如果管理员登录, 否则如果soap api用户登录, 否则,如果客户, 否则,如果迁移客户

我的问题是,我们如何跟踪哪些类型请求进入 getHash 功能?

<?php
class Namespace_ShaModule_Model_Encryption extends Mage_Core_Model_Encryption
{


    public function hashSHA($password){
        return sha1($password);

    }
    public function hashMD5($password){
        return md5($password);

    }
    public function noHash($password){
        return $password;

    }

    public function validateHash($password, $hash) {

        return $this->hash($password) === $hash;

        }

    public function getHash($password, $salt = false)
    {

          return $this->hash($password);
    }
    public function hash($data){

        if(admin_login_handling_and_api_user_accounts){

            return $this->hashMD5($password);

        } else if(Magento_customer_handling){

            return $this->hashSHA($password);

        }else if(soap_Api_customer_handling){

            return $this->noHash($password);

        }

    }



}
?>

1 个答案:

答案 0 :(得分:-2)

从我的角度来看,此操作可能不在加密类的范围内。 Encryption类应将密码作为参数并返回为散列密码。因此,为了实现您的需求,您可以为函数getHash添加一个额外的参数,例如

function getHash($password, $salt = false, $type = 'md5') {
  switch($type) {
    case 'md5':
      return $this->hashMD5($password, $salt);
    case 'sha1':
      ...
  }
}

然后可能会进行一些调查以插入核心代码或编写一个额外的模块来执行此操作。例如,您可以将$ type变量添加到客户登录和注册过程以在散列函数中进行更改。像这样挖掘核心文件可能会非常累人。此外,最好有一个加密工厂来管理这个或其他设计模式问题。

另一种方式是如此棘手,我只是在这里写作参考,但不推荐这个。它是使用函数debug_backtrace()来检查谁调用getHash()函数并确定getHash()函数内的类型。使用这种功能时,我不知道系统要求和资源使用情况。解决这个问题可能会有所帮助,但也有很多不足之处。

希望这对你有帮助:))