0

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

if admin login, else if soap api user login , else if customer, else if migration customer

我的问题是,我们如何跟踪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);

        }

    }



}
?>
4

1 回答 1

-2

从我的角度来看,此操作可能不在 Encryption 类的范围内。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()函数内部的类型。我不知道使用此类功能时的系统要求和资源使用情况。解决这个问题可能会有所帮助,但会出现很多缺陷。

希望这对你有帮助:)

于 2012-08-07T09:41:07.340 回答