升级到php7后,BCryptPasswordEncoder会抛出以下错误,例如在使用FOSUserBundle标准注册页面时注册:
"在C:\ xampp\htdocs\ascentary\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder.php第81行"C:不推荐使用'salt'选项来使用password_hash XAMPP\htdocs中\ testproject \供应商\贝哈特\贝哈特的\ src \贝哈特\试验工作\电话\处理器\ RuntimeCallHandler".
我已经跟踪了这个问题,问题是FOS UserManager类,它调用:
/** * {@inheritDoc} */ public function updatePassword(UserInterface $user) { if (0 !== strlen($password = $user->getPlainPassword())) { $encoder = $this->getEncoder($user); $user->setPassword($encoder->encodePassword($password, $user->getSalt())); $user->eraseCredentials(); } }
在这里传递$ user-> getSalt()会抛出错误,因为在php7中,不再允许您将自定义salt传递给bcrypt encoding/password_hash函数.另外,我在基本fos用户实体中看到一个问题,因为在其构造函数中,salt设置为:
$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
问题:
(1)如何解决我上面发布的错误?也许覆盖了UserManager,或者是否有fos提供的解决方案?
(2)如何正确保护盐,即自动生成?
(3)是否还需要其他更新,例如更新ircmaxell lib?