public function requestAuthenticationCode(AuthenticationContextInterface $context)
{
$token = $context->getToken();
// Iterate over two-factor providers and ask for completion
/** @var TwoFactorProviderInterface $provider */
foreach ($this->providers as $providerName => $provider) {
if ($this->flagManager->isNotAuthenticated($providerName, $token)) {
$response = $provider->requestAuthenticationCode($context);
// Set authentication completed
if ($context->isAuthenticated()) {
$this->eventDispatcher->dispatch(TwoFactorAuthenticationEvents::SUCCESS, new TwoFactorAuthenticationEvent());
$this->flagManager->setComplete($providerName, $token);
} else {
if ($context->getRequest()->get($this->authRequestParameter) !== null) {
$this->eventDispatcher->dispatch(TwoFactorAuthenticationEvents::FAILURE, new TwoFactorAuthenticationEvent());
}
}
// Return response
if ($response instanceof Response) {
return $response;
}
}
}
return null;
}