我正面临着一个让我疯狂的问题。给出了以下场景:
因此,每当我在App A上创建固定密码,同步它们时,App B上的身份验证就会起作用。
但是,每当我在App A上创建随机密码时,同步它们,App B上的身份验证就不起作用。
我在重定向后将通过会话创建的密码传递给前端。
$password = (string) rand(2938, 9578);
//$password = '12345678';
$bcrypt = new Bcrypt();
$bcrypt->setCost(14);
$entity->setPassword($bcrypt->create($password));
$entityService->save($entity);
$this->flashMessenger()->setNamespace('MpuServerUser')->addSuccessMessage(
"Benutzer-PIN erfolgreich erneuert. PIN: {$password}"
);
return $this->redirect()->toRoute('mpuserveruser');
正如你所看到的,那是我遇到麻烦的部分。每当我为具有给定字符串'123456'
的用户创建新密码时,无论如何都没有问题。
但是当我使用未注释的部分$password = (string) rand(2938, 9578);
时,我在前端获得的密码将无法进行身份验证。
尝试rand()
或mt_rand()
之间没有区别。任何人都知道这里发生了什么事吗? ^^
更新 - 显然只有6个字符或更长的密码才能正常工作。即使我设置了只有4个字母的预定义密码,它也无法使用。
答案 0 :(得分:1)
这是我的代码:
(...)
//I USE ZfcUserAdmin MODULE
if ( $this->getOptions()->getCreateUserAutoPassword() ) {
//HERE'S WHERE I'VE TRIED
//\Zend\Math\Rand::getInteger( 2938, 9578 ); --> OK
//rand( 2938, 9578 ); --> OK
$rand = \Zend\Math\Rand::getString( 8 );
$user->setPassword( $rand );
}
$uncrypted_password = $user->getPassword();
$bcrypt = new Bcrypt;
//PASSWORD COST IS SET TO 14, LIKE YOU
$bcrypt->setCost( $userOptions->getPasswordCost() );
$user->setPassword( $bcrypt->create( $uncrypted_password ) );
(...)
您的解决方案与我的解决方案之间的唯一区别是,您在会话中重定向并存储密码,而我只是使用生成的密码向用户发送电子邮件。如果我在电子邮件中使用新凭据,我可以毫无问题地登录。无论如何,我认为这不是问题,我想它应该是 BCrypt 类中的东西。