[英]How to disable cakephp3 hashing password on demand before insert it to database?
在“我的應用”中,默認情況下,我使用cakephp3的DefaultPasswordHasher創建和修改用戶密碼。 我正在做一個CSV導出/導入用戶模塊,該模塊允許通過DefaultPasswordHasher導入已散列的密碼。
我的CSV中有一些用戶具有純文本密碼,這些密碼將在導入過程中進行哈希處理。 而且用戶已經具有哈希密碼,因此只需將其推送到數據庫即可。
username;displayname;password_type;password;profilename;enabled;admin
user1;User1;plaintext;abcd1234;Default;1;1
user2;User2;hashed;$ueipzueirzouiodjfm$dsklfj;Default;1;1
所以我嘗試了這個:
創建文件./src/Auth/LegacyPasswordHasher.php並將其插入:
<?php
namespace App\Auth;
use Cake\Auth\AbstractPasswordHasher;
class LegacyPasswordHasher extends AbstractPasswordHasher
{
public function hash($password)
{
return $password;
}
}
?>
在UsersController.php中
public function import()
{
...
// If hashed is set in CSV line then :
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'passwordHasher' => ['className' => 'Legacy',]
]
]
]);
...
}
我收到一個錯誤消息,即“ Auth”別名已被加載。 是的,它是由父AppController.php實現的。 我要避免在每個Users方法上加載Auth Component。
有沒有一種方法可以僅對字段“ password”禁用按需散列?
我自己找到了解決方案。
發布問題后,我嘗試了完全錯誤的解決方案。 正確的問題是:在將密碼插入數據庫之前,是否有辦法按需禁用哈希密碼?
我不知道這是否是最好的解決方案。
由於哈希是由Model完成的,因此我創建了一個新模型,該模型指向與Users Model相同的表。
src / Model / Table / NoHashPasswordUsersTable.php:
class NoHashPasswordUsersTable extends Table
{
public function initialize(array $config) {
// Set table to use
$this->table('users');
// or After Cakephp 3.4.0
//$this->setTable('users');
...
}
public function validationDefault(Validator $validator)
{
...
// Validation rules to check length of hashed string
$validator
->add('password', 'notEmpty', [
'rule' => ['lengthBetween', 60, 60],
'message' => __('Hashed password should contains 60 chars')
]);
return $validator;
}
}
創建一個沒有功能_setPassword的實體文件src / Model / Entiry / NoHashPasswordUser.php
在src / Controller / UsersController.php中:
// Load model that allow to import Users without hashing the password
$this->loadModel('NoHashPasswordUsers');
...
// I can switch Model to use to hash or not hash the password, for example
$this->Users->save($user)
$this->NoHashPasswordUsers->save($user)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.