Ошибка двухфакторной аутентификации при обновлении до symfony 4.1 - PullRequest
0 голосов
/ 27 октября 2018

Вот мой пример кода

/**
 * @Route("/two/factor", name="google-authenticator")      
 */
public function twoFactorAction(Request $request)
{
    $user = $this->getUser();
    $secret = $this->container->get("scheb_two_factor.security.google_authenticator")->generateSecret();
    $user->setGoogleAuthenticatorSecret($secret);
    $url = null;
    if(!empty($user->getGoogleAuthenticatorSecret())){
        $url = $this->container->get("scheb_two_factor.security.google_authenticator")->getUrl($user);
    }

Вот ошибка

Служба или псевдоним scheb_two_factor.security.google_authenticator были удалены или встроены при компиляции контейнера. Вам следует либо сделать его общедоступным, либо прекратить использование контейнера напрямую и использовать вместо него внедрение зависимостей.

Работало нормально. Но после обновления с symfony 3.4 до 4.1 я получаю эту ошибку. пожалуйста, дайте мне знать, как я могу это быстро исправить уважаемый.

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Как уже говорилось, Symfony 4.1 позволяет вам внедрять службы автоматической проводки в действия вашего контроллера и в других местах. Однако вы используете более старую (2.x) версию библиотеки scheb/two-factor, которая не определяет автоматические службы.

Поскольку вы не можете обновить до 4.x этой библиотеки, вы несколько ограничены в своих возможностях. Однако должна быть возможность добавить Compiler Pass , чтобы изменить конфигурацию библиотеки scheb/two-factor в соответствии с вашими потребностями.

Короче говоря, Compiler Pass должен позволить вам переопределить эту службу как общедоступную, выполнив что-то вроде этого:

$container 
    ->getDefinition('scheb_two_factor.security.google_authenticator')
    ->setPublic(true);

Вам придется обратиться к документации , чтобы узнать, как реализовать передачу компилятора в ваше приложение.

0 голосов
/ 27 октября 2018

Вы больше не можете использовать из контейнера, потому что модификаторы доступа. Попробуйте использовать автопроводку.

Вы можете использовать этот интерфейс GoogleAuthenticatorInterface

Он поставляется из того же пакета, который вы сейчас используете: Scheb И иметь это пространство имен:

Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticatorInterface;

Ваш метод выглядит так:

public function index(GoogleAuthenticatorInterface $twoFactor)
{
    // ...
    $secret = $twoFactor->generateSecret();
}

Я надеюсь, что эта страница может помочь вам немного больше, если мне неясно. генерация секрета

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...