use*_*259 5 php bcrypt password-hash symfony fosuserbundle
升级到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();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里传递$ user-> getSalt()会抛出错误,因为在php7中,不再允许您将自定义salt传递给bcrypt encoding/password_hash函数.另外,我在基本fos用户实体中看到一个问题,因为在其构造函数中,salt设置为:
$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
Run Code Online (Sandbox Code Playgroud)
问题:
(1)如何解决我上面发布的错误?也许覆盖了UserManager,或者是否有fos提供的解决方案?
(2)如何正确保护盐,即自动生成?
(3)是否还需要其他更新,例如更新ircmaxell lib?
升级到 Symfony3。
BCryptPasswordEncoder.php第 75 行:
if ($salt) {
// Ignore $salt, the auto-generated one is always the best
}
Run Code Online (Sandbox Code Playgroud)