解决了!我在我的Entity类中创建了一个$ password属性,我认为我需要这样做。密码字段通过整个请求添加到实体。下面发布的代码都不得更改。
我正在使用friendsofcake / Crud来构建REST api。当我保存我的用户模型时,我有一个afterSave()事件,它执行密码salting和散列。发送到我的UsersController的POST数据:add()方法包含['密码']参数,但我的UsersTable有[' hash',#39; salt']字段。
基本上,我需要知道POST ['密码']参数是否以及在哪里,以及它是否在UsersTable afterSave()方法中可用。否则,我的系统是散列和盐化空密码字符串!
我是CakePHP的新手,无法找到3。*。
的简单答案这是我的UsersTable类中的afterSave()方法。
/**
* Updates Meta information after being created.
*/
public function afterSave(Event $event, Entity $entity, ArrayObject $options)
{
if($entity->returnAfterSave) return;
// update the public id
if(empty($entity->public_id))
{
$hashids = new Hashids(static::HASH_SALT, static::HASH_LENGTH);
$entity->public_id = $hashids->encode($entity->id);
}
// generate a password salt
if(empty($entity->salt))
{
$entity->generateSalt();
}
// salt and hash the password
if(empty($entity->hash))
{
// NOTE: I figured since the form data
// is loaded into the entity, I created a $password property
// in my User Entity class. This assumption may be the problem??
// Update: It was a bad assumption. Removing said property solved issue.
$entity->hashPassword();
}
// save the changes
$entity->returnAfterSave = true;
$this->save($entity);
}
此外,我了解此代码无法正确保存任何新密码,我会在创建正常工作后更新密码更改代码。