0

モジュールを作成しましたが、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);

        }

    }



}
?>
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 に答える