0

我在 CakePHP 2.4 中的身份验证遇到了一些麻烦。我烘焙了一个简单的应用程序来创建登录。我做了书中所有的事情(Auth和Tutorial)。但只有 sha1 有效。但不是 sha256 或 md5。在搜索和测试之后,我找到了一个解决方案,我必须更改书中的示例代码,现在它可以工作了。但我认为,这不是正确的解决方案。

我在 AppController 中做了以下操作:

App::uses('Controller', 'Controller');
    class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'passwordHasher' => array(
                        'className' => 'Simple',
                        'hashType' => 'sha256'
                    )
                )
            )
        )
    );
}

我用 md5、sha1 和 sha256 对此进行了测试。没问题。如果密码经过适当的哈希处理,则登录有效。

但我注意到,添加用户仅适用于 sha1,因为这是默认哈希。我的用户模型 beforeSafe 功能是这样的(来自书中):

App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel {
  public function beforeSave($options = array()) {
    if (isset($this->data[$this->alias]['password'])) {
        $passwordHasher = new SimplePasswordHasher();
          $this->data[$this->alias]['password'] = $passwordHasher->hash(
              $this->data[$this->alias]['password']
          );
    }
    return true;
  }
}

我想,AppController 中的设置就足够了,也可以更改该区域的 SimplePasswordHasher。但看起来,这还不够。所以我把它改成这样:

$this->data[$this->alias]['password'] = $passwordHasher->hash(
    $this->data[$this->alias]['password']
);

对此

$this->data[$this->alias]['password'] = Security::hash(
    $this->data[$this->alias]['password'],
'sha256',
true
);

现在一切都像一个魅力。但我的问题:

1)我是对的,这是必要的还是我的代码有其他问题?

2)据我所知,$xxx->zzz仅适用于控制器和xxx::zzz()任何地方,对吗?

3)为什么我必须说安全哈希,它应该再次用 sha256 对字符串进行哈希处理,而我通常已经在 AppController 中说过?

4

1 回答 1

0

1.据我所知,你的做法是对的。可能存在一种更清洁的方式,但我正在使用bcrypt,并且 Cookbook 说要做一些非常相似的事情。

2.你可以像你说的那样想一个简单的解释。基本上->object-operator, 来处理对象,例如$this->doEverything. 并且::scope-resolution-operator用于查找类静态属性或方法的。通常你可以在任何地方运行它,例如,Security::hash().

3.看看这里,你可能应该把你的改成AppController

'passwordHasher' => array(
                'className' => 'Simple',
                'hashType' => 'sha256'
            )

以适应建议。尽管我已经尝试过了,但没有将其更改SimplePasswordHasher为 SHA256。这是蛋糕似乎不知何故忽略的参考。但那是简单的哈希器,旨在简单的事情,所以你应该做你自己的方法,或者一种更适合你需要的方法。

于 2014-02-17T21:09:57.453 回答