У меня есть проблема, как, в моей учетной записи таблицы флажок удаления есть. Поэтому, если я удаляю пользователя, он будет равен 1. И я могу создать нового пользователя с тем же почтовым идентификатором. В то время этот код не работает, есть две записи с одинаковым почтовым идентификатором. Есть ли способ дать флаг удаления также как электронная почта.
Мой module.config.php:
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
)
),
'authentication' => array(
'orm_default' => array(
'object_manager' => 'Doctrine\ORM\EntityManager',
'identity_class' => 'Authentication\Entity\Account',
'identity_property' => 'email',
'credential_property' => 'password',
'credential_callable' => function(Account $account, $passwordGiven) {
$userPassword = new UserPassword();
$res = $userPassword->verify($account->getPassword(), $passwordGiven);
return $res && !$account->getDeleteFlag() && $account->getStatus();
},
),
)
)
Я не знаю, работает ли это на ZF2, я сейчас работаю с ZF1, но у меня была такая же проблема.
Решением было написать собственный Аут-адаптер. Этот класс реализует Zend_Auth_Adapter_Interface
и требует authenticate
метод.
В моей реализации authenticate
Я включил пользовательскую проверку для флаг плюс имя пользователя а также пароль.
Итак, когда я должен проверить пользователя:
$authAdapter = new MyAuthAdapter();
// I need only to set these values since the flag is always considered
// to be false so the user can authenticate
$authAdapter->setCredential($password)
->setIdentity($username);
//->setDeleteFlag($yourFlag) you could also implement this
Zend_Auth::getInstance()->authenticate($authAdapter)->isValid();
Надеюсь, это поможет, так как он на ZF1.
Других решений пока нет …