Token Storage Problems Symfony 5 Custom Login Authenticator

When the user logs in to the system, I need to fill a class variable (Login-> testInfo) with information, but in the controller the variable always returns null.

Here is a generic example.

The Login class

class Login extends UserInterface
{

    private $testInfo = null;

    public function setTestInfo(string $testInfo)
    {
        $this->testInfo = $testInfo;
    }

    public function getTestInfo() : ?string
    {
        return $this->testInfo;
    }
}

The Authenticator:

class FormAuthenticator extends AbstractFormLoginAuthenticator
{

...
    public function getUser($credentials, UserProviderInterface $userProvider)
    {
         $user = $this->entityManager->getRepository(Login::class)->findByUsername(credentials['username']);

        if (!$user)
        {
            throw new CustomUserMessageAuthenticationException('Username could not be found.');
        }

        //this prints NULL
        dd($user->getTestInfo());

        $user->setTestInfo('testing the string');

        //this prints 'testing the string'
        dd($user->getTestInfo());

        return $user;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {
        //this prints 'testing the string'
        dd($token->getUser()->getTestInfo());
    }

...

}

The Controller Class:

class MyController extends AbstractController
{

    private $login = null;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->login = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null;
    }

    public function home()
    {
        //this prints null
        dd($this->login->getTestInfo());
    }
}

If $user goes to the tokenStorage with the new value (‘testing the string’), why, when I try to use it on the controller, does the variable always return null? what am I doing wrong?

Source: Symfony Questions

Was this helpful?

0 / 0

Leave a Reply 0

Your email address will not be published. Required fields are marked *