Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在symfony中散列没有用户实例的用户密码_Symfony_Hash_Passwords - Fatal编程技术网

在symfony中散列没有用户实例的用户密码

在symfony中散列没有用户实例的用户密码,symfony,hash,passwords,Symfony,Hash,Passwords,可以在中读取,在Symfony框架中手动哈希密码的当前过程如下: use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; public function register(UserPasswordEncoderInterface $encoder) { // whatever *your* User object is $user = new App\Entity\User();

可以在中读取,在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
方法要求将用户实例作为其第一个参数传递。因此,在调用方法时,用户实例必须预先存在:这意味着必须在没有有效哈希密码的情况下实例化“用户”。我希望改为将密码作为构造函数参数提供,以便用户实体在创建时处于有效状态


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

UserPasswordEncoder使用已知的编码器工厂来确定给定类型用户的确切密码编码器。将代码调整为:

public function register(EncoderFactoryInterface $encoderFactory)
{
    $passwordEncoder = $encoderFactory->getEncoder(User::class);
    $hashedPassword = $passwordEncoder->encodePassword($plainPassword,null);
这应该是我们想要的。请注意,getEncoder可以采用类实例或类名


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

谢谢,它按预期工作。我认为这应该包括在文档中。如果已经有了,你能给我指一下吗?从这里开始:但是这些细节中有很多是通过查看代码本身来解决的。