Создать symfony2 файл cookie запомнить меня вручную (FOSUserBundle)

Может кто-нибудь объяснить, как вы можете вручную создать файл cookie «запомнить меня» в контроллере?

Я хочу, чтобы пользователи оставались авторизованными после того, как нажали «регистр» кнопку, без необходимости впоследствии входить в систему с их учетными данными.

Я пытался создать файл cookie вручную, но предполагаю, что это файл cookie значение неверно, поэтому функция «запомнить меня» не работает. Устанавливается файл cookie с правильным именем. Я это проверил.

Функция «запомнить меня» работает должным образом при использовании обычного процедура входа в систему с учетными данными пользователя.

security.yml security.yml запомни меня

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

Это то, что у меня есть сейчас, хотя cookie установлен, он не работает.

$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;

Обновление:

Я также пробовал работать с PersistentTokenBasedRememberMeServices с отражением, но он не работает. cookie устанавливается, но не работает

$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);

Я использую Symfony v2.0.5 и FOSUserBundle 1.0

ОБНОВЛЕНИЕ 2:

Я пробовал третий способ. То же, что и выше, но без отражения:

$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);
8
задан Jonas Wouters 30 January 2012 в 08:00
поделиться