Может ли кто-нибудь объяснить, как вы можете вручную создать 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:
Я пробовал 3-й способ,То же, что и выше, но без отражения:
$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);