symfony - 在symfony中没有用户实例的哈希用户密码

标签 symfony hash passwords

因为它可以在 official documentation 中读取,当前在 Symfony 框架中手动散列密码的过程如下:

use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

public function register(UserPasswordEncoderInterface $encoder)
{
    // whatever *your* User object is
    $user = new App\Entity\User();
    $plainPassword = 'ryanpass';
    $encoded = $encoder->encodePassword($user, $plainPassword);

    $user->setPassword($encoded);
}

encodePassword 方法要求将 User 实例作为第一个参数传递。因此,在调用该方法时,用户实例必须预先存在:这意味着必须在没有有效哈希密码的情况下实例化“用户”。我希望将密码作为构造函数参数提供,以便用户实体在创建时处于有效状态。

是否有使用 Symfony 散列密码的替代方法?

最佳答案

Symfony 5 及更高版本的更新。 Encoder 的东西被重命名为 Hasher。答案仍然有效,但只需将 EncoderFactoryInterface 替换为 PasswordHasherFactoryInterface 并将变量名称更改为 hasher。

UserPasswordEncoder 使用所谓的 EncoderFactory 来确定给定类型用户的确切密码编码器。将您的代码调整为:

public function register(EncoderFactoryInterface $encoderFactory)
{
    $passwordEncoder = $encoderFactory->getEncoder(User::class);
    $hashedPassword = $passwordEncoder->encodePassword($plainPassword,null);

这应该会按预期工作。请注意,getEncoder 可以采用类实例或类名。

另请注意,需要显式地为 salt 发送 null。由于某些原因,一些 Symfony 编码器类还没有盐的默认值。

关于symfony - 在symfony中没有用户实例的哈希用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62980930/

相关文章:

security - 为什么这么多网站不允许在密码中使用非字母数字字符?

mysql - 在 DQL 查询中加入两个实体

Symfony2 : Splitting routing. yml在多个文件中

c - 如何更新哈希函数内的表大小

c++ - 如何在 C++ 中可移植地计算 sha1 哈希?

python - 如何使这段代码与其他程序交互?

php - xx类中的注解@Doctrine\ORM\Mapping不存在,或者无法加载

symfony - 在链配置的命名空间中找不到另一个 "The class ' X'

ruby - 无限可枚举

command-line - openconnect 密码和 cookie 输入