首页 > 解决方案 > Symfony 4.2:如何在控制器之外获取编码器实例

问题描述

我需要在登录表单中检查我的密码,所以我想在函数中获取类 Authenticator 中的编码器(由 bin/console make:auth 制作)checkCredentials($credentials, UserInterface $user)

$credentials['password'] 是纯文本,$user->getPassword() 是编码密码。

我的 security.yaml 是:

encoders:
    App\Entity\User:
        algorithm: bcrypt
        cost: 12

如何获取编码器的实例?

标签: symfony

解决方案


您可以从具有security.encoder_factory服务 ID(或Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface使用自动装配的接口)的编码器工厂获取编码器。

注入工厂后,您可以通过以下方式获取特定用户实体的编码器:

use App\Entity\User;

...

$encoder = $encoderFactory->getEncoder(User:class);

推荐阅读