问:$user 中的密码哈希是否没有被 * 取代

Q: Is the password hash in $user not beplaced by *

在我的旧 cakephp 2.x 应用程序中,当我从用户模型检索数据时,密码哈希被“*”隐藏。我不是百分百肯定,但我认为这是 Cake 自动完成的。

现在正在测试 Cakephp3.0,当从用户模型中检索数据时,我很惊讶地发现了完整的散列。

我有几个关于密码散列隐藏的问题:

非常感谢您的帮助。

Am I right with my opinion this was a function in cakephp2?

是的,在 Cake 2.x 中,这是调试器的一部分,但是数据本身并没有被触及,只是在输出数据时屏蔽了一些内容。

Does anyone know, why this function was not implemented in Cakephp3 and why?

仍然执行,但已移动。这个屏蔽的全部目的是为了避免意外暴露数据源凭据(主要是错误messages/pages),它从来没有真正与可能的用户模型数据有关,这只是数据的副作用使用像 password.

这样的键

因此在 3.x 中,此功能已移至 \Cake\Database\Connection::__debugInfo()

https://github.com/cakephp/cakephp/pull/4542

这确保您在调试连接对象时仍然会得到屏蔽凭据,无论是显式还是隐式地显示在错误页面上,同时它不会再妨碍调试其他数据。

[...], where is the place to implement this functionality in [...] cake3?

这在很大程度上取决于您的用例,例如,如果您希望在调试输出中屏蔽它,那么您可以在用户实体 [=45= 中的重写 __debugInfo() 方法中实现它],类似于 Connection class 的做法。

https://github.com/cakephp/cakephp/blob/3.0.11/src/Database/Connection.php#L702

当然这只适用于实体,不适用于非水合数据(数组数据)。