在symfony中散列没有用户实例的用户密码
可以在中读取,在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();
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的默认值。谢谢,它按预期工作。我认为这应该包括在文档中。如果已经有了,你能给我指一下吗?从这里开始:但是这些细节中有很多是通过查看代码本身来解决的。