Question

Quelqu'un pourrait-il expliquer comment vous pouvez créer manuellement un cookie Remember Me dans un contrôleur?

Je veux que les utilisateurs restent connectés après avoir appuyé sur le bouton "Enregistrer", sans avoir à se connecter avec leurs informations d'identification par la suite.

J'ai essayé de créer un cookie manuellement, mais je suppose que la valeur des cookies est incorrecte, et donc la fonctionnalité "Remember Me" ne fonctionne pas. Un cookie avec le nom correct est défini. J'ai vérifié ça.

La fonctionnalité Remember Me fonctionne comme prévu lors de l'utilisation de la procédure de connexion normale avec les informations d'identification de l'utilisateur.

security.yml Security.yml Souvenez-vous de moi

security:
   firewalls:
       main:
           remember_me:
               lifetime: 86400
               domain:   ~
               path:     /
               key:      myKey

C'est ce que j'ai maintenant, même si le cookie est défini, cela ne fonctionne pas.

$um = $this->get('fos_user.user_manager');
$member = $um->createUser();

… Form stuff with bindRequest etc.

$um->updatePassword($member);
$um->updateUser($member);

$providerKey = $this->container->getParameter('fos_user.firewall_name');
$securityKey = 'myKey';

$token = new RememberMeToken($member, $providerKey, $securityKey,
$member->getRoles());
$this->container->get('security.context')->setToken($token);

$redirectResponse = new RedirectResponse($url);
$redirectResponse->headers->setCookie(
   new \Symfony\Component\HttpFoundation\Cookie(
       'REMEMBERME',
       base64_encode(implode(':', array($member->getUsername(),
$member->getPassword()))),
       time() + 60*60*24
   )
);
return $redirectResponse;

Mise à jour:

J'ai également essayé de travailler avec la classe PersistantTokenBaseDremembermeservices avec réflexion mais cela ne fonctionne pas. Un cookie est réglé mais ça ne marche pas

$token = $this->container->get('security.context')->getToken();

$providerKey = $this->container->getParameter('fos_user.firewall_name');
$securityKey = 'myKey';

$persistenService = new
PersistentTokenBasedRememberMeServices(array($um), $providerKey,
$securityKey, array('path' => '/', 'name' => 'REMEMBERME', 'domain' =>
null, 'secure' => false, 'httponly' => true,
'lifetime' => 86400));
$persistenService->setTokenProvider(new InMemoryTokenProvider());

$method = new \ReflectionMethod('Symfony\Component\Security\Http\RememberMe\PersistentTokenBasedRememberMeServices',
'onLoginSuccess');
 $method->setAccessible(true);
$method->invoke($persistenService, $request, $redirectResponse, $token);

J'utilise Symfony v2.0.5 et FosuserBundle 1.0

Mise à jour 2:

J'ai essayé une troisième voie. La même chose que ci-dessus mais sans réflexion:

$token = $this->container->get('security.context')->getToken();

$providerKey = $this->container->getParameter('fos_user.firewall_name');
$securityKey = 'myKey';

$persistenService = new PersistentTokenBasedRememberMeServices(array($um), $providerKey, $securityKey, array('path' => '/', 'name' => 'REMEMBERME', 'domain' => null, 'secure' => false, 'httponly' => true, 'lifetime' => 31536000, 'always_remember_me' => true, 'remember_me_parameter' => '_remember_me'));
$persistenService->setTokenProvider(new InMemoryTokenProvider());

$persistenService->loginSuccess($request, $redirectResponse, $token);

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top